//把可以取多少用sg函数算下
#include<iostream>
#include<cstdio>
#include<string>
#include<algorithm>
#include<cstring>
#include<vector>
#include<queue>
#include<map>
#include<set>
using namespace std;
const int N=10003;
int na[103];
int b,k,t;
int hash[103];
int sg[N];
void getsg(int a[],int n)
{
int i,j;
memset(sg,0,sizeof(sg));
for(int i=0;i<N;i++)//界限是每堆最大范围以上
{
memset(hash,0,sizeof(hash));
for(int j=0;a[j]<=i&&j<n;j++)//因为有这步 所以要排序 而且得写上j<n否则j可能越界
hash[sg[i-a[j]]]=1;//记录sg值是否出现过
for(int j=0;j<=100;j++)
if(hash[j]==0)//找第一个为0的
{
sg[i]=j;
break;//及时跳出
}
}
}
int main()
{
while(scanf("%d",&k)!=EOF&&k)
{
for(int i=0;i<k;i++)
scanf("%d",na+i);
sort(na,na+k);
getsg(na,k);
scanf("%d",&t);
while(t--)
{
int n;
scanf("%d",&n);
int u=0;
for(int i=1;i<=n;i++)
{
scanf("%d",&b);
u^=sg[b];
}
if(u==0)
printf("L");
else
printf("W");
}
printf("\n");
}
}
hdu 1536 SG函数模版题
最新推荐文章于 2018-08-28 14:01:38 发布