QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#619534#6429. Let's Play CurlingxDarkbluex#WA 152ms5296kbC++172.9kb2024-10-07 14:34:342024-10-07 14:34:36

Judging History

你现在查看的是最新测评结果

  • [2024-10-07 14:34:36]
  • 评测
  • 测评结果:WA
  • 用时:152ms
  • 内存:5296kb
  • [2024-10-07 14:34:34]
  • 提交

answer

#include <bits/stdc++.h>
#define int long long
constexpr int N = 1e5 + 5;
constexpr int INF = 1e9 + 5;

int a[N], b[N];
void solve() {
    int n, m;
    std::cin >> n >> m;
    for (int i = 1; i <= n; i++) {
        std::cin >> a[i];
    }
    for (int i = 1; i <= m; i++) {
        std::cin >> b[i];
    }
    std::sort(a + 1, a + n + 1);
    std::sort(b + 1, b + m + 1);
    b[0] = 0, b[m + 1] = INF;

    int ans = 0;
    for (int i = 1; i <= n; i++) {
        int c = a[i];
        int it_b_left = std::lower_bound(b + 1, b + 1 + m, c) - b;
        if (b[it_b_left] == c) continue;
        it_b_left--;
        int it_b_right = std::upper_bound(b + 1, b + 1 + m, c) - b;

        int left = std::max(b[it_b_left], 2 * c - b[it_b_right]);
        int right = std::min(b[it_b_right], 2 * c - b[it_b_left]);
        int it_a_left = std::upper_bound(a + 1, a + 1 + n, left) - a;
        if (it_a_left <= 1) it_a_left = 1;
        int it_a_right = std::lower_bound(a + 1, a + 1 + n, right) - a;
        it_a_right--;
        if (it_a_right >= n) it_a_right = n;
        ans = std::max(ans, it_a_right - it_a_left + 1);
    }

    for (int i = 1; i < n; i++) {
        if ((a[i] + a[i + 1]) % 2 == 0) {
            int c = (a[i] + a[i + 1]) / 2;
            int it_b_left = std::lower_bound(b + 1, b + 1 + m, c) - b;
            if (b[it_b_left] == c) continue;
            it_b_left--;
            int it_b_right = std::upper_bound(b + 1, b + 1 + m, c) - b;

            int left = std::max(b[it_b_left], 2 * c - b[it_b_right]);
            int right = std::min(b[it_b_right], 2 * c - b[it_b_left]);
            int it_a_left = std::upper_bound(a + 1, a + 1 + n, left) - a;
            if (it_a_left <= 1) it_a_left = 1;
            int it_a_right = std::lower_bound(a + 1, a + 1 + n, right) - a;
            it_a_right--;
            if (it_a_right >= n) it_a_right = n;
            ans = std::max(ans, it_a_right - it_a_left + 1);
        } else {
            int c = a[i];
            int it_b_left = std::upper_bound(b + 1, b + 1 + m, c) - b;
            it_b_left--;
            int it_b_right = std::upper_bound(b + 1, b + 1 + m, c) - b;

            int left = std::max(b[it_b_left], a[i] + a[i + 1] - b[it_b_right]);
            int right = std::min(b[it_b_right], a[i] + a[i + 1] - b[it_b_left]);
            int it_a_left = std::upper_bound(a + 1, a + 1 + n, left) - a;
            if (it_a_left <= 1) it_a_left = 1;
            int it_a_right = std::lower_bound(a + 1, a + 1 + n, right) - a;
            it_a_right--;
            if (it_a_right >= n) it_a_right = n;
            ans = std::max(ans, it_a_right - it_a_left + 1);
        }
    }
    if (ans == 0) std::cout << "Impossible\n";
    else std::cout << ans << '\n';
}

signed main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr), std::cout.tie(nullptr);

    int T;
    std::cin >> T;
    while (T--) {
        solve();
    }
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 1ms
memory: 3688kb

input:

3
2 2
2 3
1 4
6 5
2 5 3 7 1 7
3 4 3 1 10
1 1
7
7

output:

2
3
Impossible

result:

ok 3 lines

Test #2:

score: -100
Wrong Answer
time: 152ms
memory: 5296kb

input:

5553
12 19
8 8 11 18 12 9 15 38 6 32 30 30
17 28 33 2 37 20 11 38 36 18 18 30 20 33 13 31 33 37 8
12 6
7 12 14 2 19 2 17 7 4 20 1 13
7 18 23 22 1 16
8 7
5 2 4 2 4 5 8 12
13 16 6 6 5 16 11
5 7
5 13 3 8 3
11 6 9 11 13 8 11
17 19
944782509 244117333 140979583 661724696 617847780 321687699 418677763 725...

output:

1
3
4
3
3
8
11
4
2
4
5
2
4
1
11
3
2
4
2
3
4
3
1
4
9
1
3
9
2
2
1
4
5
12
2
3
4
4
3
4
11
4
5
6
3
5
4
4
5
1
3
2
4
5
5
2
6
8
3
4
3
2
2
7
2
5
3
4
1
2
5
2
5
5
1
4
1
1
2
3
3
7
9
1
2
3
16
5
5
4
3
4
2
4
3
1
2
3
3
2
2
2
4
2
7
1
1
2
4
7
2
2
7
12
1
1
1
5
2
4
1
3
2
4
3
2
2
5
4
8
10
4
2
5
2
1
5
1
2
6
2
1
9
8
1
2
3...

result:

wrong answer 5th lines differ - expected: '4', found: '3'