Uva 11489(博弈论)

来源:互联网 发布:千里眼软件是什么 编辑:程序博客网 时间:2024/06/06 03:32

题目:http://acm.hust.edu.cn/vjudge/problem/19956

    大致意思就是给你一个数,两个人每次从中抽出一位数,然后使剩下的数是3的倍数,一直抽到不能抽为止,谁不能抽了谁就输,问你最后是谁赢了。

思路:第一次抽一位数之后,剩下的数是3的倍数,3的倍数再抽一个还要保证是3的倍数,那么抽的那一个数也一定是3的倍数。


于是,代码如下:

#include<cstdio>#include<cmath>#include<iostream>#include<algorithm>#include<cstring>using namespace std;const int maxn=1e4+5;char s[maxn];int n;int main(){    scanf("%d",&n);    for(int k=1;k<=n;k++)    {        int sum=0;        int l=0;        int p=0;        scanf("%s",s);        int str=strlen(s);        for(int i=0;i<str;i++)            sum+=s[i]-'0';        int x=sum%3;        for(int i=0;i<str;i++)        {            if((s[i]-'0'-x)%3==0)//第一次抽数            {                p=1;                l=1;                s[i]='a';                break;            }        }        if(p)//第一次一定抽出一个,如果没有,就T胜利,后面的都不用算了        {            for(int i=0;i<str;i++)            {                              if(s[i]=='a')                    continue;                if((s[i]-'0')%3==0)//一直寻找,看能否找到一个数是3的倍数                {                    if(l==0)                        l=1;                    else                        l=0;                      }            }        }        if(l==0)            printf("Case %d: T\n",k);        else            printf("Case %d: S\n",k);    }}


0 0
原创粉丝点击