POJ 2960 S-Nim<博弈>

链接:http://poj.org/problem?id=2960

 #include<stdio.h>
#include<string.h>
const int N = ;
const int M= ;
int SG[N];//SG[i]记录一堆i颗石子的SG状态
int s[M];//存储可选取的石子数目集合
int k;//s[]集合中的元素个数
int mex(int x)
{
if( SG[x]!=- )return SG[x];
bool vi[N]={};
for( int i=; i<k; ++ i ){
if( s[i] <= x ){
vi[mex(x-s[i])]=;
}
}
int i=;
while(vi[i])++i;
return SG[x]=i;
}
int main()
{
while(scanf("%d",&k)!=EOF)//可选集合中的元素个数
{
if(k==)break;
int i,ans;
for(i=; i<k; i++)
scanf("%d",&s[i]);
memset(SG,-,sizeof(SG));
SG[]=;
int m;
scanf("%d",&m);//测试组数
while(m--)
{
ans=;
int l;
scanf("%d",&l);//石子堆数
while(l--)
{
int x;
scanf("%d",&x);//当前堆石子数目
if(SG[x]==-)
SG[x]=mex(x);
ans=ans^SG[x];
} if(ans==)printf("L");
else
printf("W");
} printf("\n");
} return ;
}
上一篇:Android--Matrix图片变换处理


下一篇:Docker compose自动化部署