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;
//#define ll long long
//#define int long longvoid 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
}