hdu 2873 Bomb Game 博弈论

SG函数打表,求NIM和!!!

代码如下:

 

 1 #include<cstdio>

 2 #include<cstring>

 3 #include<iostream>

 4 #include<cmath>

 5 #include<algorithm>

 6 using namespace std;

 7 int sg[51][51];

 8 char str[51];

 9 void init()

10 {

11     int i,j,a,b,k;

12     bool vis[510];

13     for(i=0;i<=50;i++){

14         sg[i][0]=sg[0][i]=i;

15     }

16     for(i=1;i<=50;i++)

17     for(j=1;j<=50;j++){

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

19         for(a=0;a<i;a++)

20         for(b=0;b<j;b++){

21             vis[sg[i][b]^sg[a][j]]=1;

22         }

23         for(k=0;;k++)

24         if(vis[k]==0){

25             sg[i][j]=k;

26             break;

27         }

28     }

29 }

30 int main()

31 {

32     int i,j,m,n,p;

33     init();

34     while(scanf("%d%d",&n,&m)){

35         if(!n&&!m) break;

36         p=0;

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

38             scanf("%s",str);

39             for(j=0;j<m;j++){

40                 if(str[j]=='#'){

41                     p^=sg[i][j];

42                 }

43             }

44         }

45         puts(p?"John":"Jack");

46     }

47     return 0;

48 }
View Code

 

 

你可能感兴趣的:(game)