题解:P15629 [2019 KAIST RUN Spring] Rainbow Beads
题目
题目要求三者都认为是色彩丰富的,因此只要有一者不为色彩丰富的则不能计算到总和里。
那我们就考虑有哪些情况(考虑相邻两个)无法算色彩丰富的呢?
- 两个颜色完全相同的。正常人觉得它颜色不变,还是完全相同的;红色盲看红、蓝颜色觉得就是红、蓝颜色,完全相同,看紫色觉得是红色,依然完全相同;蓝色盲看红、蓝颜色觉得就是红、蓝颜色,完全相同,看紫色觉得是蓝色,依然完全相同。因此不符合要求。
- 一蓝一紫。蓝色盲会觉得是两个蓝色,因此不符合要求。
- 一红一紫。红色盲会觉得是两个红色,因此不符合要求。
因此,只要判断字符串的下一个和这一个是否为以上
代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,ans,l;
string a;
signed main(){
cin>>n>>a;
for(int i=0;i<n-1;i++){
if(a[i]==a[i+1]||(a[i]=='R'&&a[i+1]=='V')||(a[i]=='V'&&a[i+1]=='R')||(a[i]=='B'&&a[i+1]=='V')||(a[i]=='V'&&a[i+1]=='B')){
ans=max(ans,i-l+1);
l=i+1;
}
}
ans=max(n-1-l+1,ans);
cout<<ans;
}