您的位置:首页 > 其它

hdu 1536/1944 / POJ 2960 / ZOJ 3084 S-Nim 博弈论

2013-08-22 21:59 459 查看
简单的SG函数应用!!!

代码如下:

#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<iomanip>
#include<cmath>
#include<cstring>
#include<vector>
using namespace std;
int sg[10001],k,a[101];
int getsg(int x)
{
if(sg[x]!=-1) return sg[x];
if(x-a[0]<0) return sg[x]=0;
bool vis[101];
memset(vis,0,sizeof(vis));
for(int i=0;i<k&&x-a[i]>=0;i++){
vis[getsg(x-a[i])]=1;
}
for(int i=0;;i++)
if(!vis[i])
return sg[x]=i;
}
int main(){
int i,j,n,m,ans,s;
while(scanf("%d",&k)&&k){
memset(sg,-1,sizeof(sg));
sg[0]=0;
for(i=0;i<k;i++) scanf("%d",&a[i]);
sort(a,a+k);
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%d",&m);
ans=0;
for(j=0;j<m;j++){
scanf("%d",&s);
ans^=getsg(s);
}
if(!ans) cout<<"L";
else cout<<"W";
}
cout<<endl;
}
return 0;
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: