zoukankan      html  css  js  c++  java
  • AtCoder Beginner Contest 118

    A - B +/- A

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

    B - Foods Loved by Everyone

    #include <bits/stdc++.h>
    
    using namespace std;
    
    const int N = 1e6 + 5;
    typedef long long LL;
    int sum[35];
    int n, m;
    int main() {
        cin >> n >> m;
        for (int i = 0; i < n; i++) {
            int k;
            cin >> k;
            while (k--) {
                int x;
                cin >> x;
                sum[x]++;
            }
        }
        int res = 0;
        for (int i = 1; i <= m;i++)
            if (sum[i] == n) res++;
        cout << res << endl;
        return 0;
    }
    

    C - Monsters Battle Royale

    给出n个怪兽,让他们互相攻击,如果a攻击b,那么b的生命值就要减去a的生命值,问最后只剩下一个怪兽,它的生命值最少可以为多少

    猜结论:求n个数的gcd即可

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

    D - Match Matching

    给出两个数n和m,问利用m种数字,组成的数字最大是多少,给出了每种数字每个需要消耗多少火柴:1,2,3,4,5,6,7,8,9 分别需要2,5,5,4,5,6,3,7,6个,也要求必须正好使用n个火柴

    完全背包,利用字符串记录路径

    注意需要先将m个种类排序,先填较大的

    #include <bits/stdc++.h>
    
    using namespace std;
    
    const int N = 1e6 + 5;
    typedef long long LL;
    int n, m, vul[15] = {0, 2, 5, 5, 4, 5, 6, 3, 7, 6};
    
    struct node {
        int num, v;
    } a[N];
    string Max(string a, string b) {
        if (a.size() > b.size()) return a;
        if (a.size() < b.size()) return b;
        return a > b ? a : b;
    }
    bool cmp(node a, node b) { return a.num > b.num; }
    int res[N];
    int main() {
        cin >> n >> m;
        for (int i = 0; i < m; i++) {
            int x;
            cin >> x;
            a[i].num = x;
            a[i].v = vul[x];
        }
        sort(a, a + m, cmp);
        vector<string> dp(n + 10, "-");
        dp[0] = "";
        for (int i = 0; i < m; i++) {
            for (int j = 0; j <= n; j++) {
                if (dp[j] == "-") continue;
                if (j + a[i].v <= n) {
                    dp[j + a[i].v] = Max(dp[j + a[i].v], dp[j] + char(a[i].num+'0'));
                }
            }
        }
        cout << dp[n] << endl;
        return 0;
    }
    
  • 相关阅读:
    【设计模式
    【JavaEE】之SSM入门项目的搭建
    【Android
    【Android
    【Android
    【Android
    【Android
    【Android
    随风 随意
    优秀代码所具备的品质
  • 原文地址:https://www.cnblogs.com/dyhaohaoxuexi/p/14401415.html
Copyright © 2011-2022 走看看