参考博客:https://blog.csdn.net/strangedbly/article/details/51137432
hdu 1536
#include<iostream>
#include<cstdio>
#include<string>
#include<algorithm>
using namespace std;
const int maxn=110,maxm=10000+10;
int n;
int s[maxn],sg[maxm];
int getsg(int x)
{
if(sg[x]!=-1)return sg[x];
bool vis[maxn];
for(int i=0;i<maxn;i++)vis[i]=0;
for(int i=1;i<=n;i++)
{
if(s[i]<=x)
{
getsg(x-s[i]);
vis[sg[x-s[i]]]=1;
}
}
for(int i=0;;i++)
if(vis[i]==0)
return sg[x]=i;
}
int main()
{
int m;
while(scanf("%d",&n)==1)
{
if(n==0)break;
for(int i=1;i<=n;i++)
scanf("%d",&s[i]);
for(int i=0;i<maxm;i++)sg[i]=-1;
scanf("%d",&m);
sg[0]=0;
for(int i=1;i<=m;i++)
{
int ans=0;
int k;
scanf("%d",&k);
for(int j=1;j<=k;j++)
{
int gg;
scanf("%d",&gg);
ans^=getsg(gg);
}
if(ans!=0)printf("W");
else printf("L");
}
cout<<endl;
}
return 0;
}