Featured image of post Codeforces Round #1093(Div.2)

Codeforces Round #1093(Div.2)

B

题目大意:

数据范围:

思路:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
void solve() {
    ll n, m;
    cin >> n >> m;
    vl a(n);
    rep(i, 0, n - 1) cin >> a[i];
    rep(i, 0, n - 1) { a[i] = m - a[i] % m; }
    int tem = 0;
    rep(i, 0, n - 1) {
        if (i == 0 || a[i] == a[i - 1])
            tem++;
        else
            tem = 1;
        if (tem >= m) {
            cout << "NO" << endl;
            return;
        }
    }
    cout << "YES" << endl;
    return;
}

C

题目大意:

数据范围:

思路:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
void solve() {
    ll p, q;
    cin >> p >> q;
    ll tem = 2 * p + 4 * q + 1;
    for (ll i = 3; i * i <= tem; i += 2) {
        if (tem % i != 0) continue;
        ll tem2 = tem / i;
        ll n = (i - 1) / 2, m = (tem2 - 1) / 2;
        if (q > min(n * (m + 1), m * (n + 1))) {
            continue;
        }
        cout << n << ' ' << m << endl;
        return;
    }
    cout << -1 << endl;
    return;
}

D1

题目大意:

数据范围:

思路:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
void ask(int l, vi res) {
    cout << "? " << l << ' ';
    rep(i, 0, l - 1) cout << res[i] << ' ';
    cout << endl;
    cout.flush();
}
void report(ll x, ll y, ll z) {
    cout << "! " << x << ' ' << y << ' ' << z << '\n';
    cout.flush();
}
void solve() {
    int n;
    cin >> n;
    int l = 1, r = 2 * n + 1, mid;
    ll x, y, z;
    int op;
    auto check = [&](vi& res) -> bool {
        int cnt = sz(res);
        ask(cnt, res);
        cin >> op;
        if ((cnt - op) % 2 == 1)
            return true;
        else
            return false;
    };
    while (l <= r) {
        mid = (l + r) / 2;
        vi tem;
        rep(i, 1, mid) tem.push_back(i);
        if (check(tem)) {
            r = mid - 1;
            x = mid;
        } else
            l = mid + 1;
    }
    l = 1, r = 2 * n + 1;
    while (l <= r) {
        mid = (l + r) / 2;
        vi tem;
        frep(i, 2 * n + 1, mid) tem.push_back(i);
        if (check(tem)) {
            y = mid;
            l = mid + 1;
        } else
            r = mid - 1;
    }
    l = y + 1, r = x - 1;
    while (l <= r) {
        mid = (l + r) / 2;
        vi tem;
        rep(i, 1, mid) tem.push_back(i);
        tem.push_back(x);
        if (check(tem)) {
            r = mid - 1;
            z = mid;
        } else
            l = mid + 1;
    }
    report(x, y, z);
    return;
}

D2

题目大意:

数据范围:

思路:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
void ask(int l, vi res) {
    cout << "? " << l << ' ';
    rep(i, 0, l - 1) cout << res[i] << ' ';
    cout << endl;
    cout.flush();
}
void report(ll x, ll y, ll z) {
    cout << "! " << x << ' ' << y << ' ' << z << '\n';
    cout.flush();
}
void solve() {
    int n;
    cin >> n;
    int l = 1, r = 2 * n + 1, mid;
    ll x, y, z;
    int op;
    auto check = [&](vi& res) -> bool {
        int cnt = sz(res);
        ask(cnt, res);
        cin >> op;
        if ((cnt - op) % 2 == 1)
            return true;
        else
            return false;
    };
    while (l <= r) {
        mid = (l + r) / 2;
        vi tem;
        rep(i, 1, mid) tem.push_back(i);
        if (check(tem)) {
            r = mid - 1;
            x = mid;
        } else
            l = mid + 1;
    }
    l = 1, r = 2 * n + 1;
    while (l <= r) {
        mid = (l + r) / 2;
        vi tem;
        frep(i, 2 * n + 1, mid) tem.push_back(i);
        if (check(tem)) {
            y = mid;
            l = mid + 1;
        } else
            r = mid - 1;
    }
    l = y + 1, r = x - 1;
    while (l <= r) {
        mid = (l + r) / 2;
        vi tem;
        rep(i, 1, mid) tem.push_back(i);
        tem.push_back(x);
        if (check(tem)) {
            r = mid - 1;
            z = mid;
        } else
            l = mid + 1;
    }
    report(x, y, z);
    return;
}