http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2190
思路 : 这个题,一开始以为是博弈,以为大概几行核心代码就搞的定,结果应该算是一个简单数学小题吧,考的是思维。按题中要求,可以得出,主要分为两种情况,一种是考虑这一数串的每个数字之和能被三整除和不能被三整除的,如果能被三整除,就判断被3整除的数字的个数有奇数个还是偶数个,如果是奇数个就是妖怪输。而不能被三整除的时候,就要去看和对3取余余几 ,如果余的数在原串里找得到或者是原串某个数对3取余与这个余数相等,那第一步的WP就必须拿掉这个数才符合规则,所以剩下的又是判断剩下的数中能被3整除的数是奇数个还是偶数个
#include<iostream> #include<string> using namespace std ; int main() { int n ; cin>>n; for(int i = 0 ; i < n ; i++) { string str ; cin>>str ; int sum = 0 ; int cnt = 0 ; for(int j = 0 ; j < str.length() ; j++) { sum += (str[j]-'0') ; if(str[j] % 3 == 0) cnt++ ; } int flag = 0 ,mark = 0; if(sum % 3 == 0) { if(cnt % 2 == 0) { flag = 1 ; } } else { int len = sum%3 ; for(int j = 0 ; j < str.length() ; j++) { if(len == (str[j]-'0')%3) { mark = 1; break ; } } if(mark) { if(cnt%2 == 1) { flag = 1 ; } } } cout<<"Case "<<i+1<<": "; if(flag) cout<<"T"<<endl ; else cout<<"S"<<endl ; } return 0 ; }