代码改变世界

暑假集训(4)第七弹——— 组合(hdu1850)

2016-08-06 17:08  HUAS_周林微  阅读(127)  评论(0编辑  收藏  举报

题意概括:你赢得了第一局。魔鬼给出的第二局是,如果有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 }
View Code