hdu 1850 Being a Good Boy in Spring Festival(尼姆博弈加强)

来源:互联网 发布:js 分享到qq空间 编辑:程序博客网 时间:2024/05/02 04:48

题意:  最后取完的选手胜利,与1907刚好相反。并输出若胜利,则第一步有多少种取的方式。

综上所述,若是    S2,S1,T0 。 则先下的人必输。

                     若是   T2,S0 。则先下的人必胜。

#include<iostream>#include<string.h>using namespace std;int main(){    int n , a[110] , m;    int sum1 , sum2 , ans;    while(scanf("%d",&n)!=EOF && n)    {         sum1=sum2=ans=m=0;         for(int i=0;i<n;i++)         {             scanf("%d",&a[i]);             if(a[i]>=2)  sum1++;             else sum2++;             ans^=a[i];         } //cout<<"ans= "<<ans<<"  sum1= "<<sum1<<"   sum2= "<<sum2<<endl;          int temp ;         if(ans==0 && sum1>=2|| ans!=0&&sum1==0&&sum2%2!=0)//因为是最后取完者胜,所以判断定相反          printf("0\n");         if(ans!=0 && sum1!=0||ans==0 && sum1==0)          {              if(ans==0)  { printf("1\n");  continue;}              //cout<<"************"<<endl;              for(int i=0;i<n;i++)              {                  temp=ans;                  temp^=a[i];   //异或sum=0,且temp<a[i]说明可以通过取第i堆最后可取胜。                   if(temp<a[i] && temp>0) m++;              }              printf("%d\n",m);         }          }    return 0;}



原创粉丝点击