Codeforces Round #681 (Div. 2, based on VK Cup 2019-2020 - Final)

A

int main() {
    IOS;
    for (cin >> _; _; --_) {
        cin >> n;
        for (int i = n << 2, j = 1; j <= n; ++j, i -= 2) cout << i << ' ';
        cout << '\n';
    } 
    return 0;
}

B

int main() {
    IOS;
    for (cin >> _; _; --_) {
        ll a, b; string s; cin >> a >> b >> s;
        ll ans = 0;
        for (int i = 0, j = -1; i < s.size(); j = i - 1) {
            while (i < s.size() && s[i] == '0') ++i;
            if (i == s.size()) break;
            if (j >= 0) ans += min(a, (i - j - 1) * b);
            else ans += a;
            while (i < s.size() && s[i] == '1') ++i;
        }
        cout << ans << '\n';
    }
    return 0;
}

C

二分

PLL a[N];
 
bool check(int t) {
    ll c = 0;
    rep (i, 1, n) {
        if (a[i].fi <= t) continue;
        else c += a[i].se;
        if (c > t) break;
    }
    return c <= t;
}
 
int main() {
    IOS;
    for (cin >> _; _; --_) {
        cin >> n;
        rep (i, 1, n) cin >> a[i].fi;
        rep (i, 1, n) cin >> a[i].se;
        ll l = 1, r = 1e9;
        while (l < r) {
            ll mid = l + r >> 1;
            if (check(mid)) r = mid;
            else l = mid + 1;
        }
        cout << r << '\n';
    }
    return 0;
}

D

看成差分, 就完事

int main() {
    IOS;
    for (cin >> _; _; --_) {
        cin >> n >> a[1];
        ll cur = 0;
        rep (i, 2, n) if (a[i] < a[i - 1]) cur += a[i - 1] - a[i];
        if (a[1] >= cur) cout << "YES\n";
        else cout << "NO\n";
    }
    return 0;
}

F

咱们首先把 0 的情况找出来

无非是 两边都不能删除呗

但是你要注意道, 你左右两边是 bj (j < i), 其实是可以删除的

那不就很简单了, 当你两边都能删那就 * 2, 那为啥删除数没影响呢?

你删的 是 ai, 得到了 bk, 且 bk 对于 以后的 bj 是可以删除的, 没变化

int main() {
    IOS;
    for (cin >> _; _; --_) {
        cin >> n >> m;
        unordered_map<int, int> st;
        rep(i, 1, n) cin >> a[i], w[a[i]] = i, v[i] = 0;
        ll ans = 1;
        rep(i, 1, m) cin >> b[i], v[b[i]] = 1;
        bool f = 0;
        rep(i, 1, m) {
            int cur = w[b[i]];
            if ((cur == n || v[a[cur + 1]]) && (v[a[cur - 1]] || cur == 1)) f = 1;
            if (cur == n || cur == 1 || v[a[cur + 1]] || v[a[cur - 1]]) v[b[i]] = 0;
            else ans = ans * 2 % mod;
        }
        if (f) cout << 0 << '\n';
        else cout << ans << '\n';
    }
    return 0;
}
posted @ 2020-11-03 01:12  洛绫璃  阅读(134)  评论(0编辑  收藏  举报