题目大意:
每行给出九个字母,由3个a,g,o组成,每次可以消除相连的K个字母,K>=1。当K=3时是最好的消除方法。问最好的消除方法最多可以多少次。
解题思路:
首先从可以消除K=1个字母,就可以看出,结果(res)最少为1。
首先我们尽可能地将3个连着的消除,res如果等于3,那就输出3。
如果res=1,那就输出2。因为剩下的6个字母,最少可以组成三个相连,但是不能是两种3个相连,所以输出就是2.
res不可能等于2,因为若是2的话那剩下的三个一定一样,那就是res=3的情况。
除了上述情况,就只剩下res=0的情况了,这里我们的判断方法是:相同的字母中最远的两个之间的字母如果有其他两个种类的字母,那结果就是1。如果不是这样,那结果就是2。
AC代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <stack>
#include <queue>
#include <map>
#include <set>
#include <vector>
#include <cmath>
#include <algorithm>
#include<bits/stdc++.h>
using namespace std;
const double N = 1e6+10;
const double pi = acos(-1.0);
const int INF = 0x3f3f3f3f;
const int MOD = 1000000007;
#define ll long long
#define CL(a,b) memset(a,b,sizeof(a))
#define MAXN 100010
int main()
{
int t;
while(cin >> t)
{
while(t--)
{
string s;
cin >> s;
string z;
z = "";
int l = 0;
int res = 0;
for(int i = 0 ; i < s.length() ; i++)
{
z = z + s[i];
l = z.length();
while(l>=3&&z[l-1]==z[l-2]&&z[l-2]==z[l-3])
{
string zz;
zz = "";
res++;
for(int j = 0 ; j < l-3 ; j++)
{
zz = zz + z[j];
}
z = zz;
l = z.length();
}
}
if(res == 3)
{
cout << res << endl;
}
else{
if(res == 1)
{
cout << "2" << endl;
}
else
{
int l = 0;
int r = 0;
int f1 = 0;
int f2 = 0;
int f3 = 0;
int k = 0;
for(int i = 0 ; i < s.length() ; i++)
{
if(s[i]=='g'&&f1 == 0)
{
l = i;
f1 = 1;
}
if(s[i]=='g')
{
r = i;
}
}
for(int i = l+1 ; i < r ; i++)
{
if(s[i]=='a')
{
f2++;
}
if(s[i]=='o')
{
f3++;
}
}
if(f2!=0&&f3!=0)
{
k++;
}
l = 0;
r = 0;
f1 = 0;
f2 = 0;
f3 = 0;
for(int i = 0 ; i < s.length() ; i++)
{
if(s[i]=='a'&&f1 == 0)
{
l = i;
f1 = 1;
}
if(s[i]=='a')
{
r = i;
}
}
for(int i = l+1 ; i < r ; i++)
{
if(s[i]=='g')
{
f2++;
}
if(s[i]=='o')
{
f3++;
}
}
if(f2!=0&&f3!=0)
{
k++;
}
l = 0;
r = 0;
f1 = 0;
f2 = 0;
f3 = 0;
for(int i = 0 ; i < s.length() ; i++)
{
if(s[i]=='o'&&f1 == 0)
{
l = i;
f1 = 1;
}
if(s[i]=='o')
{
r = i;
}
}
for(int i = l+1 ; i < r ; i++)
{
if(s[i]=='g')
{
f2++;
}
if(s[i]=='a')
{
f3++;
}
}
if(f2!=0&&f3!=0)
{
k++;
}
if(k==3)
{
cout << "1" << endl;
}
else{
cout << "2" << endl;
}
}
}
}
}
return 0;
}