https://codeforces.com/contest/1659/problem/A
input
3
7 4 3
6 5 1
19 13 6
output
RBRBRBR
RRRBRR
RRBRRBRRBRRBRRBRRBR
input
6
3 2 1
10 6 4
11 6 5
10 9 1
10 8 2
11 9 2
output
RBR
RRBRBRBRBR
RBRBRBRBRBR
RRRRRBRRRR
RRRBRRRBRR
RRRBRRRBRRR
题意 T组询问,每次询问中给定
n
n
n 、
a
a
a 、
b
b
b,其中
n
=
a
+
b
n = a + b
n=a+b,让你构造一串长度为
n
n
n,由
a
a
a 个
‘
R
′
‘R'
‘R′ 与
b
b
b 个
’
B
‘
’B‘
’B‘ 组成的字符串,并且使得连续的
’
R
’
’R’
’R’ 尽可能短,即:
R
R
B
RRB
RRB 中连续的
R
R
R 的长度为
2
2
2, 而
R
B
R
RBR
RBR 中连续的
R
R
R 的长度为
1
1
1
思路 可以理解成每个字符
B
B
B 算作一个隔板,使得分隔出一个个区间,然后你需要将
a
a
a 个
‘
R
′
‘R'
‘R′ 放回其中 如下图: 三个
B
B
B 可以分隔出
4
4
4 个区间
所以我们可以这样构造:
- 尽可能的将
R
R
R 平均分配给每个区间, 如果存在余数则再将余数均分配给部分格子中
AC代码 感觉我的代码有点抽象…
y
u
yu
yu :表示余数是否剩余
k
k
k : 表示不算余数的情况下,每个区间应该存在多少个
R
R
R
s
t
r
i
n
g
q
(
k
+
(
y
u
?
1
:
0
)
,
′
R
′
)
;
string q(k + (yu ? 1 : 0),'R');
stringq(k+(yu?1:0),′R′); :是生成长度为
k
+
(
y
u
?
1
:
0
)
k + (yu ? 1 : 0)
k+(yu?1:0) ,全是
R
R
R 的字符串
#include <bits/stdc++.h>
#define endl '\n'
#define AC return 0;
using namespace std;
void slove()
{
int n,r,b;
cin >> n >> r >> b;
int k = r / (b + 1);
int yu = r % (b + 1);
string t(k + (yu ? 1 : 0),'R');
yu = (yu ? yu - 1 : 0);
cout << t;
for(int i = 1; i <= b; i++)
{
cout << "B";
string q(k + (yu ? 1 : 0),'R');
yu = (yu ? yu - 1 : 0);
cout << q;
}
cout << endl;
}
signed main()
{
ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
int T;cin >> T; while(T--)
slove();
AC
}
|