Educational Codeforces Round 107 (Rated for Div. 2) 个人题解(A~D)

补题链接:Here

1511A. Review Site

题意:n 个影评人,ai 有三种类型,如下

  • ai=1 ,则表示支持
  • ai=0 ,则表示不支持
  • ai=3 ,则表示无所谓

现在求最大的支持数。

思路:把 ai=1,3 的累加即可

1511B. GCD Length

给定位数 a,bgcd(a,b)=c

求出 x,y

思路:保持最高位基本一致为 1 ,接下来取 0 这样一定可以得到 gcd(x,y) = c

比赛的时候的猜想,现在证明不出来。。。

void solve() {
    int a, b, c;
    cin >> a >> b >> c;
    for (int i = 0; i <= a - c; ++i) cout << 1;
    for (int i = 1; i < c; ++i) cout << 0;
    cout << " 1";
    for (int i = 1; i < b; ++i) cout << 0;
    cout << "\n";
}

1511C. Yet Another Card Deck

题意:给定 n 张卡牌和 q 次操作,每次操作要执行输出下标(从1开始)、把该卡片放置最前面

由于卡牌种类仅 50 种,所以我可以枚举和变化下标

详细见代码

void solve() {
    int n, q;
    cin >> n >> q;
    vector<int> a(n), idx(51);
    for (int &x : a) cin >> x;
    for (int i = n - 1; i >= 0; --i) idx[a[i]] = i;
    for (int i = 0, t; i < q; ++i) {
        cin >> t;
        cout << idx[t] + 1 << " ";
        for (int j = 1; j <= 50; ++j)
            if (j != t && idx[j] < idx[t]) idx[j]++; // 使原本在此卡牌之前的牌往后移
        idx[t] = 0;
    }
}

另外看了下其他dalao的代码想起可以用树状数组做

1511D. Min Cost String

由于要满足 k 次 cost,只要贪心拼接即可

void solve() {
    int n, k;
    cin >> n >> k;
    string s;
    for (int i = 0; i < k; i++) {
        s += 'a' + i;
        for (int j = i + 1; j < k; j++) {
            s += 'a' + i;
            s += 'a' + j;
        }
    }
    // assert(s.size() == k * k);
    for (int i = 0; i < n; i += 1) cout << s[i % s.size()];
}

1511E. Colorings and Dominoes

没怎么懂这么题,先贴一下学长的代码

void solve() {
    int n, m;
    cin >> n >> m;
    vector<string> vs(n);
    for (int i = 0; i < n; ++i) cin >> vs[i];
    int k = n * m;
    vector<ll> pw(k + 1), ans(k + 1), pv(k + 1);
    for (int i = 0; i <= k; ++i) pw[i] = i ? pw[i - 1] * 2 % mod : 1;
    for (int i = 0; i <= k; ++i) pv[i] = i ? pv[i - 1] * (mod + 1) / 2 % mod : 1;
    ll sum = 0;
    for (int i = 1; i <= k; ++i) {
        if (i >= 3 and i % 2) sum = (sum + pv[i]) % mod;
        ans[i] = (ans[i - 1] * 2 + pw[i] * sum + (i % 2 == 0)) % mod;
        //cout << i << " " << ans[i] << "\n";
    }
    int w = 0;
    for (auto s : vs)
        for (char c : s) w += c == 'o';
    ll res = 0;
    for (int i = 0; i < n; ++i) {
        int p = 0;
        for (int j = 0; j <= m; ++j)
            if (j < m and vs[i][j] == 'o') p++;
            else {
                res = (res + ans[p] * pw[w - p]) % mod;
                p   = 0;
            }
    }
    for (int i = 0; i < m; i++) {
        int p = 0;
        for (int j = 0; j <= n; j++)
            if (j < n and vs[j][i] == 'o') p++;
            else {
                res = (res + ans[p] * pw[w - p]) % mod;
                p   = 0;
            }
    }
    cout << res;
}
posted @   RioTian  阅读(107)  评论(0编辑  收藏  举报
编辑推荐:
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 全程不用写代码,我用AI程序员写了一个飞机大战
点击右上角即可分享
微信分享提示

📖目录