A. Red Versus Blue

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 long


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
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值