hdu 1524 A Chess Game 博弈论

SG函数!!

代码如下:

 

 1 #include<stdio.h>

 2 #include<cstring>

 3 #define I(x) scanf("%d",&x)

 4 int map[1005][1005],sg[1005];

 5 int getsg(int n)

 6 {

 7     if(sg[n]!=-1) return sg[n];

 8     if(!map[n][0]) return sg[n]=0;

 9     bool vis[1001];

10     memset(vis,0,sizeof(vis));

11     for(int i=1;i<=map[n][0];i++)

12         vis[getsg(map[n][i])]=1;

13     int i=0;

14     while(vis[i]) i++;

15     return sg[n]=i;

16 }

17 int main(){

18     int i,t,n,s,k,j,m;

19     while(I(n)!=EOF){

20         for(i=0;i<n;i++){

21             I(map[i][0]);

22             for(j=1;j<=map[i][0];j++)

23                 I(map[i][j]);

24         }

25         memset(sg,-1,sizeof(sg));

26         while(I(m)&&m){

27             s=0;

28             for(i=0;i<m;i++){

29                 I(k);

30                 s^=getsg(k);

31             }

32             puts(s?"WIN":"LOSE");

33         }

34     }

35     return 0;

36 }
View Code

 

 

 

你可能感兴趣的:(game)