• AtCoder Beginner Contest 087


    A - Buying Sweets

    #include <bits/stdc++.h>
    
    using namespace std;
    
    const int N = 1e6 + 5;
    typedef long long LL;
    int a, b, x;
    int main() {
        cin >> x >> a >> b;
        x-=a;
        cout << x % b << endl;
        return 0;
    }
    

    B - Coins

    #include <bits/stdc++.h>
    
    using namespace std;
    
    const int N = 1e6 + 5;
    typedef long long LL;
    int a, b, c, x;
    int main() {
        cin >> a >> b >> c >> x;
        int res = 0;
        for (int i = 0; i <= a; i++) {
            for (int j = 0; j <= b; j++) {
                for (int k = 0; k <= c; k++) {
                    if (i * 500 + j * 100 + k * 50 == x) res++;
                }
            }
        }
        cout << res << endl;
        return 0;
    }
    

    C - Candies

    给出一个2xN的矩阵,问从左上角走到右下角能获得的权值最大是多少

    类似数塔模型的做法,推一下即可

    #include <bits/stdc++.h>
    
    using namespace std;
    
    const int N = 1e6 + 5;
    typedef long long LL;
    int n, a[2][N], dp[2][N];
    int main() {
        cin >> n;
        for (int i = 0; i < 2; i++) {
            for (int j = 0; j < n; j++) {
                cin >> a[i][j];
            }
        }
        for (int i = n - 1; i >= 0; i--) {
            dp[1][i] = dp[1][i + 1] + a[1][i];
            dp[0][i] = max(dp[1][i], dp[0][i + 1]) + a[0][i];
        }
        cout << dp[0][0] << endl;
        return 0;
    }
    

    D - People on a Line

    给出n个人,他们都有一个权值,现在给出m个说法,每个说法代表第y个人比第x个人大d,问这m个说法是否能够自洽

    带权并查集裸题

    #include <bits/stdc++.h>
    
    using namespace std;
    
    const int N = 1e6 + 5;
    typedef long long LL;
    int n, m;
    int f[N], d[N];
    int findf(int x) {
        if (f[x] == x) return x;
        int tmp = findf(f[x]);
        d[x] += d[f[x]];
        return f[x] = tmp;
    }
    void Union(int x, int y, int w) {
        int fx = findf(x), fy = findf(y);
        if (fx != fy) {
            f[fy] = fx;
            d[fy] = w - d[y] + d[x];
        }
    }
    
    int main() {
        cin >> n>>m;
        for (int i = 0; i <= n; i++) f[i] = i;
        int flag = 0;
        for (int i = 0; i < m; i++) {
            int x, y, w;
            cin >> x >> y >> w;
            int fx = findf(x), fy = findf(y);
            if (fx == fy) {
                if (d[y] - d[x] != w) flag = 1;
            } else
                Union(x, y, w);
        }
        if (flag) cout << "No" << endl;
        else
            cout << "Yes" << endl;
    
        return 0;
    }
    
  • 相关阅读:
    VMware虚拟机下如何安装一个64位的win7系统
    无人驾驶刚刚开始的未来
    Ruby on Rails开发Web应用的基本概念
    Hibernate学习(1)简单介绍
    Linux pipe 源代码分析
    【知识梳理1】Android触摸事件机制
    【CODEFORCES】 C. Dreamoon and Strings
    LightOJ
    [leetcode]Maximum Subarray
    25个增强iOS应用程序性能的提示和技巧 — 中级篇
  • 原文地址:https://www.cnblogs.com/dyhaohaoxuexi/p/14387547.html
Copyright © 2020-2023  润新知