邂逅明下 HDU - 2897
原题链接
考察:博弈论
思路:
sg函数打表找规律,发现n%(p+q)后,若1<=n<=p则必败.
想说一下的就是,sg函数的必败点不能定义为>0的数.这样会让某些必胜点sg(x)>0被判断必败.
Code
#include <iostream>
#include <cstring>
#include <set>
using namespace std;
const int N = 65539;
int n,p,q;
//int sg(int x)
//{
// if(f[x]!=-1) return f[x];
// set<int> s;
// if(x<p) s.insert(sg(0));
// for(int i=p;i<=x&&i<=q;i++)
// s.insert(sg(x-i));
// for(int i=0;;i++)
// if(!s.count(i)) return f[x] = i;
//}
int main()
{
while(scanf("%d%d%d",&n,&p,&q)!=EOF)
{
// memset(f,-1,sizeof f);
// for(int i=1;i<=p;i++) f[i] = 0;
// f[0] = 1;
// if(!sg(n)) puts("LOST");
// else puts("WIN");
n%=(p+q);
if(n>=1&&n<=p) puts("LOST");
else puts("WIN");
}
return 0;
}