UVA 11489 Integer Game(ゲーム)

966 ワード

タイトルリンク:http://vjudge.net/contest/view.action?cid=46225#problem/H
1つの長さが1000ビットを超えない数を与えるたびに、残りの皆さんの和を3の倍数にして、取れないまで取ることができます.各統計各位は三取余に対して0,1,2を得た.すでに各桁数のとsum;
次にsum%3の値で最初に残りの和を3の倍数にする.
最後にstepのパリティを判断して勝者を確定する.
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
char a[1010];
int num[3];
int main()
{
    int t,x=0;
    cin>>t;
    while(t--){
        printf("Case %d: ",++x);
        cin>>a;
        num[0]=num[1]=num[2]=0;
        int sum=0;
        int len=strlen(a);
        for(int i=0;i<len;i++){
            sum+=a[i]-'0';
            num[(a[i]-'0')%3]++;
        }
        int step=0;
        if(num[sum%3]){
            num[sum%3]--;
            step=1;
        }
        if(step)
            step+=num[0];
        if(step%2)
            puts("S");
        else
            puts("T");
    }
    return 0;
}