题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1536
SG讲解:https://www.cnblogs.com/aiguona/p/9126324.html
检验最好用bool,这道题book[ ]用int超时要了我的老命。
题中没说默认升序,卡到绝望
救命:为什么输入aa[ ]时我从1开始时,并且在第一个for循环中的j也从1开始,并且结束也是<=,为啥一直WA???,这里也卡到喵生绝望。请求大佬帮忙解答,谢谢!!!!
#include<iostream>
#include<cstdio>
#include<cmath>
#include<string>
#include<string.h>
#include<cstring>
#include<algorithm>
using namespace std;
int n,m;
const int maxn=105;
const int maxnn=10005;
int aa[maxn];
int sg[maxnn];
bool book[maxnn];
int sum;
void findd(int y)
{
memset(sg,0,sizeof(sg));
for(int i=0; i<maxnn; i++)
{
memset(book,false,sizeof(book));
for(int j=0; j<y&&aa[j]<=i; j++) //这里
{
book[sg[i-aa[j]]]=true;
}
for(int j=0; j<maxnn; j++)
{
if(!book[j])
{
sg[i]=j;
break;
}
}
}
}
int main()
{
while(cin>>n,n)
{
for(int i=0; i<n; i++) //这里
{
cin>>aa[i];
}
sort(aa,aa+n);
findd(n);
cin>>m;
while(m--)
{
int p=0,sum=0;
cin>>p;
// int sum=0;
for(int i=0; i<p; i++)
{
int u;
cin>>u;
sum^=sg[u];
}
if(sum)
{
cout<<"W";
}
else
cout<<"L";
}
cout<<endl;
}
return 0;
}