本文共 1251 字,大约阅读时间需要 4 分钟。
首先说下一定是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 #include #include #include #include #include #define IOS ios::sync_with_stdio(false)using namespace std;#define inf (0x3f3f3f3f)typedef long long int LL;#include #include #include #include #include #include #include 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;}
转载于:https://www.cnblogs.com/liuweimingcprogram/p/6195960.html