Codeforces-C-Nice Garland(枚举+暴力)
You have a garland consisting of nn lamps. Each lamp is colored red, green or blue. The color of the ii-th lamp is sisi ('R', 'G' and 'B' — colors of lamps in the garland).
You have to recolor some lamps in this garland (recoloring a lamp means changing its initial color to another) in such a way that the obtained garland is nice.
A garland is called nice if any two lamps of the same color have distance divisible by three between them. I.e. if the obtained garland is tt, then for each i,ji,j such that ti=tjti=tj should be satisfied |i−j| mod 3=0|i−j| mod 3=0. The value |x||x| means absolute value of xx, the operation x mod yx mod y means remainder of xx when divided by yy.
For example, the following garlands are nice: "RGBRGBRG", "GB", "R", "GRBGRBG", "BRGBRGB". The following garlands are not nice: "RR", "RGBG".
Among all ways to recolor the initial garland to make it nice you have to choose one with the minimum number of recolored lamps. If there are multiple optimal solutions, print any of them.
Input
The first line of the input contains one integer nn (1≤n≤2⋅1051≤n≤2⋅105) — the number of lamps.
The second line of the input contains the string ss consisting of nn characters 'R', 'G' and 'B' — colors of lamps in the garland.
Output
In the first line of the output print one integer rr — the minimum number of recolors needed to obtain a nice garland from the given one.
In the second line of the output print one string tt of length nn — a nice garland obtained from the initial one with minimum number of recolors. If there are multiple optimal solutions, print any of them.
Examples
input
Copy
3
BRB
output
Copy
1
GRB
input
Copy
7
RGBGRBB
output
Copy
3
RGBRGBR
思路:一共有6种情况,选出一个改变最小的
代码:
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
char a[200005];
char b[200005];
char c[200005];
int main() {
int n;
cin>>n;
scanf("%s",b);
int len=strlen(b);
strcpy(a,b);
int maxn=999999;
int s=0;
for(int t=0; t<len; t+=3) {
if(a[t]!='R'&&t<len) {
a[t]='R';
s++;
}
if(a[t+1]!='G'&&t+1<len) {
a[t+1]='G';
s++;
}
if(a[t+2]!='B'&&t+2<len) {
a[t+2]='B';
s++;
}
}
if(s<maxn) {
maxn=s;
strcpy(c,a);
}
strcpy(a,b);
s=0;
for(int t=0; t<len; t+=3) {
if(a[t]!='R'&&t<len) {
a[t]='R';
s++;
}
if(a[t+1]!='B'&&t+1<len) {
a[t+1]='B';
s++;
}
if(a[t+2]!='G'&&t+2<len) {
a[t+2]='G';
s++;
}
}
if(s<maxn) {
maxn=s;
strcpy(c,a);
}
strcpy(a,b);
s=0;
for(int t=0; t<len; t+=3) {
if(a[t]!='G'&&t<len) {
a[t]='G';
s++;
}
if(a[t+1]!='R'&&t+1<len) {
a[t+1]='R';
s++;
}
if(a[t+2]!='B'&&t+2<len) {
a[t+2]='B';
s++;
}
}
if(s<maxn) {
maxn=s;
strcpy(c,a);
}
strcpy(a,b);
s=0;
for(int t=0; t<len; t+=3) {
if(a[t]!='G'&&t<len) {
a[t]='G';
s++;
}
if(a[t+1]!='B'&&t+1<len) {
a[t+1]='B';
s++;
}
if(a[t+2]!='R'&&t+2<len) {
a[t+2]='R';
s++;
}
}
if(s<maxn) {
maxn=s;
strcpy(c,a);
}
strcpy(a,b);
s=0;
for(int t=0; t<len; t+=3) {
if(a[t]!='B'&&t<len) {
a[t]='B';
s++;
}
if(a[t+1]!='G'&&t+1<len) {
a[t+1]='G';
s++;
}
if(a[t+2]!='R'&&t+2<len) {
a[t+2]='R';
s++;
}
}
if(s<maxn) {
maxn=s;
strcpy(c,a);
}
strcpy(a,b);
s=0;
for(int t=0; t<len; t+=3) {
if(a[t]!='B'&&t<len) {
a[t]='B';
s++;
}
if(a[t+1]!='R'&&t+1<len) {
a[t+1]='R';
s++;
}
if(a[t+2]!='G'&&t+2<len) {
a[t+2]='G';
s++;
}
}
if(s<maxn) {
maxn=s;
strcpy(c,a);
}
cout<<maxn<<endl;
puts(c);
return 0;
}
Codeforces-C-Nice Garland(枚举+暴力)的更多相关文章
- Tomb Raider HihoCoder - 1829 (二进制枚举+暴力)(The 2018 ACM-ICPC Asia Beijing First Round Online Contest)
Lara Croft, the fiercely independent daughter of a missing adventurer, must push herself beyond her ...
- HDU 3484 Matrix Game 枚举暴力
上次周赛碰到这个题目,居然都没思路,真是不应该啊,起码也应该想到枚举法. 因为题目只允许每一row进行reverse操作,而每两列可以进行交换操作,所以首先把row的变化固定下来,即枚举第一列与第1- ...
- D. Diverse Garland Codeforces Round #535 (Div. 3) 暴力枚举+贪心
D. Diverse Garland time limit per test 1 second memory limit per test 256 megabytes input standard i ...
- Codeforces 626D Jerry's Protest(暴力枚举+概率)
D. Jerry's Protest time limit per test:2 seconds memory limit per test:256 megabytes input:standard ...
- codeforces 675B B. Restoring Painting(暴力枚举)
题目链接: B. Restoring Painting time limit per test 1 second memory limit per test 256 megabytes input s ...
- CodeForces - 593A -2Char(思维+暴力枚举)
Andrew often reads articles in his favorite magazine 2Char. The main feature of these articles is th ...
- Codeforces Gym 100015H Hidden Code 暴力
Hidden Code 题目连接: http://codeforces.com/gym/100015/attachments Description It's time to put your hac ...
- Educational Codeforces Round 61 C 枚举 + 差分前缀和
https://codeforces.com/contest/1132/problem/C 枚举 + 差分前缀和 题意 有一段[1,n]的线段,有q个区间,选择其中q-2个区间,使得覆盖线段上的点最多 ...
- codeforces 650D D. Image Preview (暴力+二分+dp)
题目链接: http://codeforces.com/contest/651/problem/D D. Image Preview time limit per test 1 second memo ...
随机推荐
- python dict.fromkeys()研究
def unique(seq): #return [x for x in my_list if x not in locals()['_[1]']] return {}.fromkeys(seq).k ...
- apache server和tomcat集群配置二:垂直负载
垂直负载就是同一个机器中的不同服务器之间的负载.跟水平负载(ip不一样的服务器之间的负载)的最大区别就是要修改tomcat的端口号,避免引起冲突. 还要注意apache中workers.propert ...
- python中的整数、浮点数和布尔值
整数和浮点数有那个四则运算: 两种类型的数可以直接进行加减,当整数和浮点数进行加减的时候,结果会自动的变为浮点数,其中除法运算是“/”来表示的, 而余数的算术符号是“%”来表示的. 在布尔值的判断中我 ...
- Python之整数,浮点数和布尔类型
整数和浮点数有那个四则运算: 两种类型的数可以直接进行加减,当整数和浮点数进行加减的时候,结果会自动的变为浮点数,其中除法运算是“/”来表示的, 而余数的算术符号是“%”来表示的.如果是为了求除完后的 ...
- 下载Django
Django下载教程以及学习教程https://code.ziqiangxuetang.com/django/django-queryset-api.html 或者直接搜索自强学堂
- sql语句中的问号是干什么的???
1.实例代码一: String sql = "SELECT userid,name FROM tuser WHERE userid=? AND password=?" ; pst ...
- 解决列表中增加字典覆盖之前相同key的字典
dic = {} lst = [] # 先声明一个字典和一个列表 dic['name'] = "chenrun" lst.append(dic) print(lst) dic[&q ...
- 【转】nginx的模块变量(HTTP核心模块变量)
nginx的HTTP核心模块引入了大量的变量,可以在指定范围内使用这些变量的值,可以分为三类:一是客户请求头中发送的变量.二是服务器端响应头中的变量,第三是nginx产生的各种变量,我们可以使用$变量 ...
- Luogu 3911 最小公倍数之和
感觉自己被早上的名校协作体和下午的数学题虐哭了,每天为自己的菜发愁…… 发现$a_{i}$很小,开一个桶记一下每个数 出现的个数,设$c_{i} = \sum_{j = 1}^{n}(a_{j} == ...
- Ryouko's Memory Note
题目意思:一个书有 n 页,每页的编号依次从 1 到 n 编排.如果从页 x 翻到页 y,那么|x-y|页都需要翻到(联系生活实际就很容易理解的了).接着有m pieces 的 information ...