刚刚开始居然写成二分了,不知道为什么wa了,贴一下代码
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int N = 105;
int t, n, r, b;
int main()
{
cin >> t;
while (t--)
{
cin >> n >> r >> b;
int ll = 0, rr = r;
while (ll < rr)
{
int mid = ll + rr >> 1;
if (mid * (b+1) >= r)rr = mid;
else ll = mid + 1;
}
bool end = false;
for (int i = 0; i < b; i++)
{
if(!end)
for (int i = 0; i < rr; i++)
{
putchar('R');
r--;
if (!r) {
end = true;
break;
}
}
putchar('B');
}
while (r--)putchar('R');
puts("");
}
return 0;
}
实际上什么算法也没有,就是简单的模拟
事实证明需要多换角度
ac代码
#include<iostream>
using namespace std;
int main()
{
int t;
cin >> t;
while (t--)
{
int n, a, b;
cin >> n >> a >> b;
int num = a / (b+1);
int mod = a % (b+1);
for (int i = 0; i < b+1; i++)
{
for (int i = 0; i < num; i++)
putchar('R');
if (mod)cout << 'R', mod--;
if(i!=b)putchar('B');
}
//while (mod--)cout << 'R';
puts("");
}
return 0;
}