题意:有一连串的数字,两个人轮流取一个数,当谁取走数后,剩下的数的和不能被3整除,则这个人输了,求出先手是否能胜。
思路:当数只有一个时,先后必胜。当数大于两个时,先判断先手取完数后,剩下的数是否能被3整除,如果可以的话,接下去两个人轮流取的数都必须是3的整数倍。计算3的整数倍的个数就可以了。
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int MAXN = 1005;
char s[MAXN];
int arr[MAXN];
int n, sum, used, l;
bool judge() {
for (int i = 0; i < l; i++) {
if ((sum - arr[i]) % 3 == 0) {
used = i;
return true;
}
}
return false;
}
int main() {
int cas, t = 1;
scanf("%d", &cas);
while (cas--) {
scanf("%s", s);
l = strlen(s);
sum = 0;
for (int i = 0; i < l; i++) {
arr[i] = s[i] - '0';
sum += arr[i];
}
printf("Case %d: ", t++);
if (n == 1)
printf("S\n");
else {
if (!judge())
printf("T\n");
else {
int cnt = 0;
for (int i = 0; i < l; i++) {
if (i == used)
continue;
if (arr[i] % 3 == 0)
cnt++;
}
if (cnt % 2 == 0)
printf("S\n");
else
printf("T\n");
}
}
}
return 0;
}