记录一个菜逼的成长。。
大致题意:
给你一个a数组 每次可以取a[i]个,q次询问,每次询问 共有m堆,因为sg函数是一堆的,所以将每堆的sg值异或就是答案。
#include <bits/stdc++.h>
using namespace std;
const int maxn = 10000 + 10;
int s[110];
int sg[maxn];
bool Hash[maxn]; //bool 换成 int 就会超时。。原因在于sg_solve函数里的memset..
void sg_solve(int *a,int n)
{
memset(sg,0,sizeof(sg));
for( int j,i = 1; i <= maxn - 5; i++ ) {
memset(Hash,0,sizeof(Hash));
for( j = 0 ; j < n; j++ ){
if(i - a[j] >= 0)Hash[sg[i-a[j]]] = 1;
}
for( j = 0; j <= maxn - 5; j++ )
if(!Hash[j])break;
sg[i] = j;
}
}
int main()
{
int n,m,ans,q;
while(~scanf("%d",&n),n){
for( int i = 0; i < n; i++ )
scanf("%d",s+i);
sg_solve(s,n);
scanf("%d",&q);
while(q--){
scanf("%d",&m);
ans = 0;
for( int i = 0,x; i < m; i++ ){
scanf("%d",&x);
ans ^= sg[x];
}
printf("%c",ans?'W':'L');
}
puts("");
}
return 0;
}