分了一堆情况。。。。细细分就好了
#include <bits/stdc++.h>
using namespace std;
//0 1 2 R G B
int record[3];
char str[55];
void add(char ch)
{
if(ch == 'R')
++record[0];
else if(ch == 'G')
++record[1];
else
++record[2];
}
int type()
{
int ret = 0;
if(record[0]) ++ret;
if(record[1]) ++ret;
if(record[2]) ++ret;
return ret;
}
int confirmc(int s)
{
if(record[s]) return s;
if(s == 0)
{
if(record[++s]) return s;
return ++s;
}
if(s == 2)
{
if(record[--s]) return s;
return --s;
}
}
int main()
{
int T,len,res;
scanf("%d",&T);
while(T--)
{
record[0] = record[1] = record[2] = 0;
res = 0;
scanf(" %s",str);
len = strlen(str);
for(int i = 0; i < len; ++i)
{
if(i == 0) add(str[i]);
else
{
int typenum = type();
int c1,c2;
if(typenum == 1)
{
c1 = confirmc(0);
if(record[c1] >= 2)
res += 2;
else
++res;
}
else if(typenum == 2)//两种颜色情况
{
//先确定是哪两种颜色 即颜色的下标
c1 = confirmc(0);
c2 = confirmc(2);
if(record[c1] < 2 && record[c2] < 2)
res += 2;
else if((record[c1] >=2 && record[c2] < 2)
|| (record[c1] < 2 && record[c2] >= 2))
res += 3;
else
res += 4;
}
else//全颜色情况
{
if(record[0] >= 2 && record[1] >= 2 && record[2] >= 2)
res += 6;
else if((record[0]+record[1]+record[2]) == 3)
res += 3;
//某一个大于等于2
//某两个大于等于2
else if((record[0] >= 2 && record[1] < 2 && record[2] < 2)
|| (record[0] < 2 && record[1] >= 2 && record[2] < 2)
|| (record[0] < 2 && record[1] < 2 && record[2] >= 2))
res += 4;
else if((record[0] >= 2 && record[1] >= 2 && record[2] < 2)
|| (record[0] < 2 && record[1] >= 2 && record[2] >= 2)
|| (record[0] >= 2 && record[1] < 2 && record[2] >= 2))
res += 5;
}
add(str[i]);//添加新颜色放在最后
}
}
printf("%d\n",res);
}
return 0;
}