zoukankan      html  css  js  c++  java
  • AtCoder Beginner Contest 220 复盘

    A

    一遍 AC。

    int main() {
        int a, b, c;
        cin >> a >> b >> c;
    
        for (int i = a; i <= b; ++i) {
            if (i % c == 0) {
                cout << i << endl;
                return 0;
            }
        }
        cout << -1 << endl;
        return 0;
    }
    

    B

    一遍 AC。

    std::string a, b;
    int k;
    
    int main() {
        cin >> k;
        cin >> a >> b;
    
        int aa = 0, bb = 0;
        for (int i = 0; i < (int) a.size(); ++i) {
            aa = aa * k + a[i] - '0';
        }
        for (int i = 0; i < (int) b.size(); ++i) {
            bb = bb * k + b[i] - '0';
        }
        cout << 1ll * aa * bb << endl;
        return 0;
    }
    

    C

    读错题了。。把大于号看成大于等于号,然后交了一发没过

    #易错警示:读错题真的要命,特别是一些细微的地方。

    const int MAXN = 1e5 + 10;
    
    int n;
    lli aa[MAXN], x;
    
    int main() {
        n = read();
        rep (i, 1, n) aa[i] = readll();
        x = readll();
        lli sum = 0;
        rep (i, 1, n) sum += aa[i];
        lli reptimes = x / sum; reptimes *= n;
        lli last = x % sum;
        int i = 1;
        while (last >= 0) {
            last -= aa[i];
            ++i;
        }
        printf("%lld\n", reptimes + i - 1);
        return 0;
    }
    

    D. FG operation

    读错题 + 1,以为是在序列末尾插入,然后想了半天不会做。

    在前面插入就很好做了,相当于把一个前缀变成一个数,于是设 dp[i][j] 表示把前 i 个数字变成 j (0 <= j <= 9) 的方案数

    转移用刷表法比较方便。

    const int MAXN = 1e5 + 10;
    const int HA = 998244353;
    
    int n, aa[MAXN];
    int dp[MAXN][10];
    
    int main() {
        n = read();
        rep (i, 1, n) aa[i] = read();
        dp[1][aa[1] % 10] = 1;
        for (int i = 1; i <= n - 1; ++i) {
            for (int j = 0; j <= 9; ++j) {
                (dp[i + 1][(j * aa[i + 1]) % 10] += dp[i][j]) %= HA;
                (dp[i + 1][(j + aa[i + 1]) % 10] += dp[i][j]) %= HA;
            }
        }
        rep (i, 0, 9) printf("%d\n", dp[n][i]);
        return 0;
    }
    

    E. Distance on Large Perfect Binary Tree

    维护树上两点的各种信息时,往往选定它们的 LCA 作为中介,这是一个套路。
    但可惜我推了半天式子还没推出来。

    F. Distance Sum 2

    考场上发现 E 不会做,于是 skip 掉了换 F,发现莫名简单,就是一个套路题。

    分子树内和子树外统计即可。

    const int MAXN = 2e5 + 10;
    
    int n;
    std::vector<int> G[MAXN];
    
    lli dep[MAXN], siz[MAXN];
    lli sumdep[MAXN];
    
    void dfs(int u, int fa) {
        siz[u] = 1;
        forall (G[u], i) {
            int v = G[u][i];
            if (v == fa) continue;
            dfs(v, u);
            siz[u] += siz[v];
            dep[v] = dep[u] + 1;
            sumdep[u] += sumdep[v] + siz[v];
        }
    }
    
    lli ans[MAXN];
    void getans(int u, int fa, lli outersiz, lli outerdis) {
        ans[u] = sumdep[u] + outerdis + outersiz;
        forall (G[u], i) {
            int v = G[u][i];
            if (v == fa) continue;
            lli n_outersiz = siz[1] - siz[v];
            lli n_outerdis = outerdis + outersiz + sumdep[u] - sumdep[v] - siz[v];
            getans(v, u, n_outersiz, n_outerdis);
        }
    }
    int main() {
        n = read();
        rep (i, 1, n - 1) {
            int u = read(); int v = read();
            G[u].push_back(v); G[v].push_back(u);
        } dfs(1, 0);
        getans(1, 0, 0, 0);
        rep (i, 1, n) cout << ans[i] << endl;
        return 0;
    }
    
  • 相关阅读:
    Ajax的工作原理
    ios 应用多语言自由切换实现
    开源码应用之Eclipse篇
    搜索引擎solr和elasticsearch
    字符串截取进阶
    nginx源代码分析--nginx模块解析
    C#网络编程系列文章(五)之Socket实现异步UDPserver
    mysql存储引擎的种类与差别(innodb与myisam)
    程序的记事本--log4net
    在海思hisiv100nptl平台上交叉编译并安装SRS
  • 原文地址:https://www.cnblogs.com/handwer/p/15417375.html
Copyright © 2011-2022 走看看