杭电 1850

来源:互联网 发布:租房上哪个网站好 知乎 编辑:程序博客网 时间:2024/06/06 22:10

思路:基于求SG值的方法,判断是否能赢

 

代码:

#include<stdio.h>int main(){int M;int ass[100];int sum;int num;int i,j;while(1){num=0;sum=0;scanf("%d",&M);if(M==0)break;for(i=0;i<M;i++)//先判断是否能赢{scanf("%d",&ass[i]);sum^=ass[i];}if(sum==0)//sg值异或为0,必输{printf("0\n");continue;}//求必胜方法数for(i=0;i<M;i++)//每次选取一堆物品做参考{sum=0;for(j=0;j<M;j++)//求出其他各堆得异或值{if(j==i)continue;sum^=ass[j];}if(ass[i]>=sum)//判断 参考值和sum的大小,小于就不行{num++;}}printf("%d\n",num);}return 0;}