题意:给你很n堆石头,k代表你有k种拿法,然后给出没堆石头的数量,求胜负
直接套用模版
找了好久之前写的代码贴上来
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
int s[101],sg[100001],k;
int mex(int m)
{
int vis[101]={0};
int i;
for(i=0;i<k;i++)
{
int v=m-s[i];
if(v<0)
break;
if(sg[v]==-1)
sg[v]=mex(v);
vis[sg[v]]=1;
}
for(i=0;;i++)
if(vis[i]==0)
return i;
}
int main()
{
int i,t,n,m,ans;
while(cin>>k,k)
{
for(i=0;i<k;i++)
scanf("%d",&s[i]);
sort(s,s+k);
memset(sg,-1,sizeof(sg));
sg[0]=0;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
ans=0;
while(n--)
{
scanf("%d",&m);
if(sg[m]==-1)
sg[m]=mex(m);
ans^=sg[m];
}
if(ans)
printf("W");
else
printf("L");
}
printf("\n");
}
return 0;
}