描述
题解
一道模拟题,AC率之高,令人发指,但是并不是说明这道题很水,毕竟A它的人数基数不大。
这里根据题意,需要额外考虑的是当球的个数是1个或者2个时,结果分别是0和1,然后,就需要考虑球放的位置了,当然,这其实是一个烟雾弹,我们只需要每次都尽量往中间放,使两边的球色最杂,这时,就要考虑到每种颜色球的个数了,如果某种颜色球只有一个,那么它只能提供1有效分;如果是0个,那么一分也提供不了;但是如果超过1个,那么一定可以提供2有效分。
模拟每次操作,最后将总分输出即可……
代码
#include <iostream>
#include <cstring>
using namespace std;
const int MAXS = 55;
const int MAXC = 3;
char S[MAXS];
int RGB[MAXC]; // 0R 1G B2
int main(int argc, const char * argv[])
{
int T;
cin >> T;
while (T--)
{
memset(RGB, 0, sizeof(RGB));
cin >> S;
int len = (int)strlen(S);
if (len == 1)
{
cout << "0\n";
continue;
}
else if (len == 2)
{
cout << "1\n";
continue;
}
int res = 1;
RGB[S[0] == 'R' ? 0 : S[0] == 'G' ? 1 : 2]++;
RGB[S[1] == 'R' ? 0 : S[1] == 'G' ? 1 : 2]++;
for (int i = 2; i < len; i++)
{
for (int j = 0; j < 3; j++)
{
res += RGB[j] >= 2 ? 2 : RGB[j];
}
RGB[S[i] == 'R' ? 0 : S[i] == 'G' ? 1 : 2]++;
}
cout << res << '\n';
}
return 0;
}