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; }