(UVA

来源:互联网 发布:怎样注销淘宝账号 编辑:程序博客网 时间:2024/06/05 17:04

链接: https://vjudge.net/problem/UVA-11489
题意:给定字符串N(1000个非0数字),两个人轮流取一个数字,要求取玩之后剩下的数是3的倍数,不能取的人输。
两个人足够聪明,谁会获胜? 先手胜输出S,否则输出T。

分析:博弈,记录每次取完后的3的倍数的个数

#include <bits/stdc++.h>using namespace std;#define mem(a,n) memset(a,n,sizeof(a))#define pb(x) push_back(x)typedef long long LL;typedef unsigned long long ull;const int mod=1e9+7;const double eps=1e-6;const int INF=0x3f3f3f3f;const int N=1e3+5;int cnt[3];char str[N];int main(){    //ios::sync_with_stdio(false);    int T,cas=1;    scanf("%d",&T);    while(T--)    {        mem(cnt,0);        scanf("%s",str);        int tmp,tp=0;        for(int i=0;str[i];i++)        {            tmp=str[i]-'0';            cnt[tmp%3]++;            tp+=tmp;        }        int ans=0;        if(cnt[tp%3])        {            cnt[tp%3]--;            ans=cnt[0]+1;        }        printf("Case %d: %c\n",cas++,ans&1?'S':'T');    }    return 0;}