zoukankan      html  css  js  c++  java
  • D. Green and Black Tea 贪心 + 构造

    http://codeforces.com/contest/746/problem/D

    首先说下一定是NO的情况。

    假设a > b

    那么,b最多能把a分成b + 1分,如果每份刚好是k的话,那么就最多能支持a的最大值是(b + 1) * k

    其实就好比如,分成3分的话,x1 + x2  + x3 = m,每个xi <= k的,那么最多就是3 * k了。

    所以判定下后,

    后面的,如果a多,就用a,(注意不能超过k个)

    b多,用b。一路模拟。

    因为已经保证有解了,所以模拟后就是答案。

    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #include <cmath>
    #include <algorithm>
    #include <assert.h>
    #define IOS ios::sync_with_stdio(false)
    using namespace std;
    #define inf (0x3f3f3f3f)
    typedef long long int LL;
    
    
    #include <iostream>
    #include <sstream>
    #include <vector>
    #include <set>
    #include <map>
    #include <queue>
    #include <string>
    void pr(int k, char ch) {
        for (int i = 1; i <= k; ++i) {
            printf("%c", ch);
        }
    }
    void work() {
        int n, k, a, b;
        scanf("%d%d%d%d", &n, &k, &a, &b);
        if ((LL)k * (min(a, b) + 1) < max(a, b)) {
            cout << "NO" << endl;
            return;
        }
        int to = 0;
        int has = 0;
        if (a > b) {
            while (to < n) {
                if (a > b && has < k) {
                    printf("G");
                    has++;
                    a--;
                    to++;
                } else {
                    printf("B");
                    b--;
                    has = 0;
                    to++;
                }
            }
        } else {
            while (to < n) {
                if (b > a && has < k) {
                    printf("B");
                    has++;
                    to++;
                    b--;
                } else {
                    printf("G");
                    has = 0;
                    to++;
                    a--;
                }
            }
        }
    }
    
    int main() {
    #ifdef local
        freopen("data.txt", "r", stdin);
    //    freopen("data.txt", "w", stdout);
    #endif
        work();
        return 0;
    }
    View Code
  • 相关阅读:
    BZOJ1233 干草堆
    POJ1321棋盘问题【搜索】
    1008
    10.2训练赛
    2014 ACM/ICPC Asia Regional Shanghai Online【未完成】
    hdu5045||2014 ACM/ICPC Asia Regional Shanghai Online【数位dp】
    0926
    poj1007【求逆序数】
    hlg1287数字去重和排序II【hash】
    hlgChocolate Auction【并查集】
  • 原文地址:https://www.cnblogs.com/liuweimingcprogram/p/6195960.html
Copyright © 2011-2022 走看看