题解:P15629 [2019 KAIST RUN Spring] Rainbow Beads

· · 题解

题目

题目要求三者都认为是色彩丰富的,因此只要有一者不为色彩丰富的则不能计算到总和里。

那我们就考虑有哪些情况(考虑相邻两个)无法算色彩丰富的呢?

  1. 两个颜色完全相同的。正常人觉得它颜色不变,还是完全相同的;红色盲看红、蓝颜色觉得就是红、蓝颜色,完全相同,看紫色觉得是红色,依然完全相同;蓝色盲看红、蓝颜色觉得就是红、蓝颜色,完全相同,看紫色觉得是蓝色,依然完全相同。因此不符合要求。
  2. 一蓝一紫。蓝色盲会觉得是两个蓝色,因此不符合要求。
  3. 一红一紫。红色盲会觉得是两个红色,因此不符合要求。

因此,只要判断字符串的下一个和这一个是否为以上 3 种情况即可,当遇到任意一种情况时,更新答案和区间的首个位置。

代码

#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;
}