从第一步之后,每个状态的和都是3的倍数,拿完之后的和也是3的倍数,说明拿的这个数一定是3的倍数。统计一下3的倍数的数量,根据第一步拿的情况分情况讨论判断奇偶性就行了。
注意最后只剩下一个数即使不是3的倍数也可以拿。
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
#include <algorithm>
#define LL long long
char s[1005];
int a[1005];
int kase=1;
int main(){
int T;
cin>>T;
while(T--){
scanf("%s",s);
printf("Case %d: ",kase++);
int len=strlen(s);
int thr=0;
int sum=0;
for(int i=0;i<len;i++){
a[i]=int(s[i]-'0');
sum+=a[i];
if(a[i]%3==0) thr++;
}
if(len==1) printf("S\n");
else if(sum%3==0){
if(thr&1) printf("S\n");
else printf("T\n");
}
else {
bool flag=0;
for(int i=0;i<len;i++){
if((sum-a[i])%3==0){
flag=1;
break;
}
}
if(!flag) printf("T\n");
else {
if((len-thr)==2){
if(thr&1){
printf("S\n");
}
else printf("T\n");
}
else {
if(thr&1)
printf("T\n");
else printf("S\n");
}
}
}
}
return 0;
}