题目链接:
http://codeforces.com/problemset/problem/746/D
题解:
题目大意:有一个人要喝a,b两种茶(总数为n),但是他有一个要求,不能连续喝同一种茶超过k次,让你输出满足条件的喝茶的过程。
这题的思路很重要,自己一开始是想每隔k次放一次a,b中的少的那个茶, 但是这么弄会出现一个问题,放茶的数量可能达不到题目中的要求(不能很好的满足题目中a,b的个数),因此需要转换一下思路,在满足条件的情况下,模拟过程就行了。
代码 :
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
#define met(a,b) memset(a,b,sizeof(a))
#define inf 0x3f3f3f3f
int main()
{
int n,k,a,b;
scanf("%d%d%d%d",&n,&k,&a,&b);
string ans="";
char ra='G',rb='B';
int cnt=0;
while(a+b>0)
{
if(a<b||cnt>=k)
{
swap(a,b);
swap(ra,rb);
cnt=0;
}
if(a<=0)
{
printf("NO\n");
return 0;
}
a--;
cnt++;
ans+=ra;
}
cout<<ans<<endl;
}