这题两个坑点,g要排序,这个不难想。
最坑的是Hash数组要换成bool型,int就TLE到死吧。
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=1e4+5;
int sg[maxn],g[maxn];
bool Hash[maxn];
int k;
void cal_sg()
{
memset(sg,false,sizeof(sg));
for(int i=1;i<=10000;i++)
{
memset(Hash,0,sizeof(Hash));
int h=0;
for(int j=0;j<k&&i-g[j]>=0;j++) Hash[sg[i-g[j]]]=true;
for(int j=0;j<=i;j++){
if(Hash[j]==0){
sg[i]=j;
break;
}
}
}
}
int readint()
{
char c=getchar();
while(!isdigit(c)) c=getchar();
int x=0;
while(isdigit(c)){
x=x*10+c-'0';
c=getchar();
}
return x;
}
int main()
{
while(scanf("%d",&k))
{
if(k==0) break;
for(int i=0;i<k;i++) g[i]=readint();
sort(g,g+k);
cal_sg();
int m;
m=readint();
while(m--)
{
int l,h,ans=0;
l=readint();
for(int i=0;i<l;i++) {h=readint();ans^=sg[h];}
if(ans) printf("W");
else printf("L");
}
printf("\n");
}
return 0;
}