HDU 1850 Being a Good Boy in Spring Festival

这是一道简单的Nim游戏组合博弈问题,对于Nim游戏的某个位置(x1,x2,x3...),当且仅当他们的部分nim和等于0(即各个值的异或),则当前位于P点,所以对于第一步,只要有一个xi大于其余元素的异或值,则xi可以改变成为其余元素的异或值(因为是大于),则这就是一种可能的选择

View Code
 1 /*
2 * Author:lonelycatcher
3 * problem:HDU 1850 Being a Good Boy in Spring Festival
4 * Type:博弈
5 */
6 #include <iostream>
7 #include<stdio.h>
8 using namespace std;
9 int m;
10 int sequence[150];
11 int main()
12 {
13 setbuf(stdout,NULL);
14 int ans,i,temp;
15 while(scanf("%d",&m)&&m)
16 {
17 ans=0,temp=0;
18 for(i=0;i<m;i++)
19 {
20 scanf("%d",&sequence[i]);
21 temp^=sequence[i];
22 }
23 if(temp==0)
24 {
25 printf("0\n");continue;
26 }
27 for(i=0;i<m;i++)
28 {
29 if(sequence[i]>(temp^sequence[i]))ans++;//xor满足结合律和交换律
30 }
31 printf("%d\n",ans);
32 }
33 return 0;
34 }

你可能感兴趣的:(spring)