https://vjudge.net/contest/203034#problem/C
给出一行9个字符,分别是3个g,3个a,3个o,每次操作可以去掉其中的一种字符,并把剩余的字符再连起来,如果去掉的3个字符是连在一起的即算作一次得分,问最多能得多少分。
模拟即可,因为结果只有1,2,3 3种情况,模拟去掉的字符种类即可。
#include<bits/stdc++.h>
using namespace std; char a[22];
int find(char e)
{
char aa[22];
strcpy(aa,a);
for(int i=0;i<9;i++)
{
if(aa[i]==e)
{
aa[i]='*';
}
}
int js=0;
char b='s';
bool f2=0;
int ans=0;
for(int i=0;i<9;i++)
{
if(aa[i]=='*')continue;
if(b=='s')
b=aa[i];
if(aa[i]==b)
js++;
else {
b=aa[i];
js=1;
}
if(js==3)
{
return 2;
f2=1;
break;
}
}
if(f2==0)
{
return 1;
}
}
int main(){
int t;
cin>>t;
while(t--)
{
int s=0;
bool flag=0;
cin>>a;
for(int i=0;i<strlen(a)-2;i++)
{
if(a[i]==a[i+1]&&a[i+1]==a[i+2])
{
for(int j=i;j+3<=8;j++)
a[j]=a[j+3];
flag=1;
break;
}
}
if(flag)
{
bool flag1=0;
for(int q=0;q<4;q++)
{
if(a[q]==a[q+1]&&a[q+1]==a[q+2])
{
cout<<"3"<<endl;
flag1=1;
break;
}
}
if(flag1==0)
cout<<"2"<<endl;
}
else {
int ans=find('a');
ans=max(find('g'),ans);
ans=max(find('o'),ans);
cout<<ans<<endl;
}
}
return 0;
}