Educational Codeforces Round 99 (Rated for Div. 2)

A - Strange Functions

无非是删除后导0, 1, 10, 100.., 有几位就有几种

int main() {
    IOS;
    for (cin >> _; _; --_) {
        string s; cin >> s; cout << s.size() << '\n';
    }
    return 0;
}

B - Jumps

你肯定要保证在 i, (i + 1) * i / 2 >= n 且 (i - 1) * i / 2 < n

然后就是选择步数减小, 你差 1, 只能在多付出一步, 其他的都可以通过选择第 k, 步变成 -1,

即减小了k + 1, k >= 1, 肯定能凑下来

int main() {
    IOS; VI c;
    rep (i, 1, 1e6) {
        ll a = i * (i + 1) >> 1;
        c.pb(a);
        if (a > 1e6) break;
    }
    for (cin >> _; _; --_) {
        cin >> n;
        int w = lower_bound(all(c), n) - c.begin();
        if (n == c[w]) { cout << w + 1 << '\n'; continue; }
        int a = c[w] - n;
        cout << w + 1  + (a == 1) << '\n';
    }
    return 0;
}

C - Ping-pong

md, 阅读理解, 先得分, 🤮

那不就相当, 你发球我不接, 最后一个我再接, 相当于 a - 1 : b

int main() {
    IOS;
    for (cin >> _; _; --_) {
        cin >> n >> m;
        cout << n - 1 << ' ' << m << '\n';
    }
    return 0;
}

D - Sequence and Swaps

500, 纯暴力

先排序把最终目标, 然后枚举排好序的 n + 1 元素那个最后不要

任何一个置换, 都是个环, 从最小的位置交换即可, 当然先要保证 这个置换群最小值 >= k, 就行

int main() {
    IOS;
    for (cin >> _; _; --_) {
        cin >> n; cin >> a[n + 1]; b[n + 1] = a[n + 1];
        bool f = 0, g = 0;
        rep (i, 1, n) {
            cin >> a[i], b[i] = a[i];
            f = f || a[i] == a[n + 1];
            g = g || a[i] < a[i - 1];
        }
        if (!g) { cout << 0 << '\n'; continue; }
        sort(b + 1, b + 2 + n);
        int ans = 1e9;
        rep (i, 1, n + 1) {
            int res = 0, k = a[n + 1];
            for (int l = 1, r = 1; l <= n; ++l, r += (r == i) + 1)
                if (a[l] != b[r])
                    if (a[l] >= k && b[r] >= k) ++res, k = a[l];
                    else { res = 1e9; break; }
            umin(ans, res);
        }
        cout << (ans == 1e9 ? -1 : ans) << '\n';
    }
    return 0;
}
posted @ 2020-12-01 10:45  洛绫璃  阅读(180)  评论(0编辑  收藏  举报