POJ 2960 典型的sg函数
这道题之前做过的,但是晚上拿出来熟悉一下!
但是runtime error!,很奇怪,查!坚决不看之前的代码。后来突然一个念头:会不胡hash数组没有初始化!加了个hash[110]={0};
A了,忘记的是定义为全局性质的数组才会被编译器自动初始化为0;非全局的不会自动初始化!哎哎!!教训。
/*
poj 2960
result:AC
time:188MS
*/
#include"iostream"
#include"algorithm"
using namespace std;
int s[110],k;
int sg[10010];
int getSg(int n)
{
if(sg[n]!=-1)
return sg[n];
int hash[110]={0};
for(int i=0;s[i]<=n&&i<k;i++){
if(sg[n-s[i]]==-1)
sg[n-s[i]]=getSg(n-s[i]);
hash[sg[n-s[i]]]=1;
}
for(int i=0;;i++)
if(hash[i]!=1) return i;
}
int main()
{
while(cin>>k,k)
{
memset(sg,-1,sizeof(sg));
sg[0]=0;
int i;
for(i=0;i<k;i++)
cin>>s[i];
sort(s,s+k);
int ans,n,tmp;
cin>>n;
while(n--){
ans=0;
int m;
cin>>m;
for(int j=0;j<m;j++){
cin>>tmp;
ans^=getSg(tmp);
}
if(ans==0)
cout<<"L";
else
cout<<"W";
}
cout<<endl;
}
return 0;
}
浙公网安备 33010602011771号