HDU 1850 Being a Good Boy in Spring Festival(sg関数)
4706 ワード
先にsg関数を暴力で出して、sg(x)=xを発見して、それから一つ一つの走法を列挙して、異種あるいは結果が0かどうかを見てみます.temp^temp=0なので、直接判断できます.
1 #include <iostream>
2 #include <cstdio>
3 #include <cstring>
4 #include <algorithm>
5 using namespace std;
6 int n;
7 int p[101];
8 int main()
9 {
10 int i,temp,ans,num;
11 while(scanf("%d",&n)!=EOF)
12 {
13 ans = 0;
14 if(!n) break;
15 for(i = 1; i <= n; i ++)
16 {
17 scanf("%d",&p[i]);
18 ans ^= p[i];
19 }
20 num = 0;
21 if(ans == 0)
22 printf("0
");
23 else
24 {
25 for(i = 1; i <= n; i ++)
26 {
27 temp = ans;
28 temp ^= p[i];
29 if(p[i] >= temp)
30 num ++;
31 }
32 printf("%d
",num);
33 }
34 }
35 return 0;
36 }