• Codeforces Round #540 (Div. 3)


    http://codeforces.com/contest/1118

    A. Water Buying

    #include <bits/stdc++.h>
    using namespace std;
    
    int T;
    
    int main() {
        scanf("%d", &T);
        while(T --) {
            long long N;
            int a, b;
            cin >> N >> a >> b;
            long long ans = 0;
    
            bool flag;
            if(2 * a <= b) flag = true;
            else flag = false;
    
            if(flag) ans = N * a;
            else {
                ans = b * (N / 2);
                ans += a * (N % 2);
            }
    
            cout << ans << endl;
        }
        return 0;
    }
    View Code

    B. Tanya and Candies

    #include <bits/stdc++.h>
    using namespace std;
    
    const int maxn = 200010;
    int N;
    int num[maxn];
    long long even[maxn], odd[maxn];
    
    int main() {
        scanf("%d", &N);
        long long sum = 0;
        for(int i = 1; i <= N; i ++) {
            scanf("%d", &num[i]);
            sum += num[i];
    
            if(i % 2) {
                odd[i] = odd[i - 1] + num[i];
                even[i] = even[i - 1];
            }
    
            else if(i % 2 == 0) {
                even[i] = even[i - 1] + num[i];
                odd[i] = odd[i - 1];
            }
        }
    
        int ans = 0;
        for(int i = 1; i <= N; i ++) {
            int sum1 = 0, sum2 = 0;
            sum1 = even[i - 1] + odd[N] - odd[i];
            sum2 = sum - num[i];
    
            if(sum1 * 2 == sum2) ans ++;
        }
    
        printf("%d
    ", ans);
        return 0;
    }
    View Code

    D1. Coffee and Coursework (Easy version)

    #include <bits/stdc++.h>
    using namespace std;
    
    int N, M;
    vector<int> v;
    
    int main() {
        scanf("%d%d", &N, &M);
        v.resize(N);
        for(int i = 0; i < N; i ++)
            scanf("%d", &v[i]);
    
        sort(v.rbegin(), v.rend());
        for(int i = 1; i <= N; i ++) {
            int sum = 0;
            for(int j = 0; j < N; j ++) {
                sum += max(v[j] - j / i, 0);
            }
            if(sum >= M) {
                printf("%d
    ", i);
                return 0;
            }
        }
        printf("-1
    ");
        return 0;
    }
    View Code

    D2. Coffee and Coursework (Hard Version)

    #include <bits/stdc++.h>
    using namespace std;
    
    int N, M;
    vector<int> v;
    
    bool isFinish(int x) {
        long long sum = 0;
        for(int i = 0; i < N; i ++)
            sum += max(0, v[i] - i / x);
        if(sum >= M) return true;
        return false;
    }
    
    int main() {
        scanf("%d%d", &N, &M);
        v.resize(N);
        for(int i = 0; i < N; i ++)
            scanf("%d", &v[i]);
    
        int ans = INT_MAX;
        sort(v.rbegin(), v.rend());
        int l = 1, r = N + 1, mid;
        while(l < r) {
            mid = (l + r) / 2;
            if(isFinish(mid)) {
                r = mid;
                ans = min(ans, mid);
            }
            else l = mid + 1;
        }
    
        if(ans < INT_MAX) printf("%d
    ", ans);
        else printf("-1
    ");
        return 0;
    }
    View Code

    E. Yet Another Ball Problem

    #include <bits/stdc++.h>
    using namespace std;
    
    int N, K;
    
    long long rec(int x) {
        long long res = 0;
        for(int i = 1; i <= x; i ++)
            res += i;
    
        return res;
    }
    
    vector<pair<int, int> > v;
    
    int main() {
        scanf("%d%d", &N, &K);
        if(N > rec(K - 1) * 2) printf("NO
    ");
        else {
            printf("YES
    ");
            for(int i = 1; i < K; i ++) {
                int j = i + 1;
                while(j <= K) {
                    v.push_back({i, j});
                    v.push_back({j, i});
                    j ++;
                }
                if(v.size() > 200000) break;
            }
    
            for(int i = 0; i < N; i ++)
                printf("%d %d
    ", v[i].first, v[i].second);
        }
        return 0;
    }
    View Code

     F1. Tree Cutting (Easy Version)

    #include <bits/stdc++.h>
    using namespace std;
    
    const int maxn = 300005;
    int N;
    int color[maxn], blue[maxn], red[maxn];
    vector<int> v[maxn];
    int ans = 0;
    
    void dfs(int child, int parent) {
        if(color[child] == 1) red[child] ++;
        if(color[child] == 2) blue[child] ++;
    
        for(int i = 0; i < v[child].size(); i ++) {
            if(v[child][i] != parent) {
                dfs(v[child][i], child);
                red[child] += red[v[child][i]];
                blue[child] += blue[v[child][i]];
    
                if((blue[v[child][i]] == blue[0] && !red[v[child][i]]) || (red[v[child][i]] == red[0] && !blue[v[child][i]]))
                    ans ++;
            }
        }
    }
    
    int main() {
        scanf("%d", &N);
        memset(red, 0, sizeof(red));
        memset(blue, 0, sizeof(blue));
        for(int i = 1; i <= N; i ++) {
            scanf("%d", &color[i]);
            if(color[i] == 1) red[0] ++;
            else if(color[i] == 2) blue[0] ++;
        }
    
        for(int i = 0; i < N - 1; i ++) {
            int a, b;
            scanf("%d%d", &a, &b);
            v[a].push_back(b);
            v[b].push_back(a);
        }
    
        dfs(1, 0);
        printf("%d
    ", ans);
        return 0;
    }
    View Code
  • 相关阅读:
    WCF 、Web API 、 WCF REST 和 Web Service 的区别
    BusyIndicator using MVVM 忙碌状态指示器的的实现
    复制文件夹的方法 .net
    SQL/LINQ/Lamda
    CSLA验证规则总结
    C++中GB2312字符串和UTF-8之间的转换
    如何用VC编写供PB调用的DLL
    【转】lucene4.3.0 配置与调试
    cygwin主要命令
    【转】eclipse中window->preference选项中没有tomcat的解决方法
  • 原文地址:https://www.cnblogs.com/zlrrrr/p/10477662.html
Copyright © 2020-2023  润新知