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 }