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

 

 

posted @ 2013-09-03 21:46  _随心所欲_  阅读(301)  评论(0编辑  收藏  举报