icpc:problems:usaco22dec_feeding_the_cows_b
problems | |
---|---|
名称 | Feeding the Cows B |
题目编号 | USACO22DEC_B2 |
题目链接 | luogu.com.cn/… |
来源 | USACO |
算法分类 | 贪心 |
难易程度 | 容易 |
Feeding the Cows B
想法
为了让草地越来越少,就需要让每块草地利用价值最大 → 每头牛尽可能走的多。
所以枚举到第i块的牛时,就将草种在i+k的位置上,之后i~i+2k的牛就不需要去关注。持续这样的过程,直到所有的牛尽可能走的远。
代码实现
#include<iostream> #include<string> #include<vector> using namespace std; int main() { int T; cin >> T; while(T--) { string line, ans; int n, k, cnt = 0; cin >> n >> k; cin >> line; for (int i = 0; i < n; ++i) ans += '.'; for (int i = 0; i < n; ++i) { if(line[i] == 'G') { if(i + k < n) ans[i+k] = 'G'; else ans[n-1] = 'G'; i = i + 2*k; } } for (int i = 0; i < n; ++i) { if(line[i] == 'H') { if(i + k < n-1) ans[i+k] = 'H'; else { for(int j = n-1; j >= 0; j--) if(ans[j] == '.') { ans[j] = 'H'; break; } } i = i + 2*k; } } for(auto i : ans) if(i != '.') cnt++; cout << cnt << '\n' << ans << '\n'; } return 0; }
/app/www/public/data/pages/icpc/problems/usaco22dec_feeding_the_cows_b.txt · 最后更改: 2023/02/13 13:22 由 温婕莺