璟雯院

珺璟如晔,雯华若锦

用户工具

站点工具


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 由 温婕莺