hdu 2873 Bomb Game 博弈论

时间:2022-04-07 14:56:04

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

代码如下:

 #include<cstdio>
#include<cstring>
#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
int sg[][];
char str[];
void init()
{
int i,j,a,b,k;
bool vis[];
for(i=;i<=;i++){
sg[i][]=sg[][i]=i;
}
for(i=;i<=;i++)
for(j=;j<=;j++){
memset(vis,,sizeof(vis));
for(a=;a<i;a++)
for(b=;b<j;b++){
vis[sg[i][b]^sg[a][j]]=;
}
for(k=;;k++)
if(vis[k]==){
sg[i][j]=k;
break;
}
}
}
int main()
{
int i,j,m,n,p;
init();
while(scanf("%d%d",&n,&m)){
if(!n&&!m) break;
p=;
for(i=;i<n;i++){
scanf("%s",str);
for(j=;j<m;j++){
if(str[j]=='#'){
p^=sg[i][j];
}
}
}
puts(p?"John":"Jack");
}
return ;
}