题意概括:你赢得了第一局。魔鬼给出的第二局是,如果有N堆牌,先手的人有几种可能胜利。
问题分析:尼姆游戏,先得到n堆牌的数量异或和,再将异或和与每一个牌组的数量异或,如果结果小于原牌组数量
则可能++。
1 #include "cstdio" 2 int M[104]; 3 int main() 4 { 5 int m,sum,f; 6 while (scanf ("%d",&m) && m) 7 { 8 sum=f=0; 9 for (int i=1;i<=m;i++) 10 { 11 scanf ("%d",&M[i]); 12 sum^=M[i]; 13 } 14 for (int i=1;i<=m;i++) 15 { 16 if (M[i] > (M[i]^sum)) 17 f++; 18 } 19 printf ("%d\n",f); 20 } 21 return 0; 22 }
时间: 2024-09-28 19:28:11