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;
}
posted @ 2011-06-01 23:45  Ac_smile  阅读(617)  评论(1编辑  收藏  举报