这个题是求SG函数,不过我第一次用vector果断超时,估计数据有点强?
代码:
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
const int maxn=110;
int k,m,s[maxn],sg[11100];
int SG(int x)
{
if(sg[x]!=-1)
return sg[x];
bool vis[maxn];
memset(vis,0,sizeof(vis));
for(int i=0;i<k;i++)
{
if(s[i]>x)
break;
if(sg[x-s[i]]==-1)
SG(x-s[i]);
vis[sg[x-s[i]]]=1;
}
for(int i=0;;i++)
if(!vis[i])
return sg[x]=i;
return sg[x]=0;
}
int main()
{
while(scanf("%d",&k)&&k)
{
for(int i=0;i<k;i++)
scanf("%d",&s[i]);
memset(sg,-1,sizeof(sg));
sg[0]=0;
sort(s,s+k);
scanf("%d",&m);
while(m--)
{
int n,ans=0;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
int val;
scanf("%d",&val);
ans^=SG(val);
}
if(ans)
printf("W");
else
printf("L");
}
printf("\n");
}
return 0;
}