第一次做博弈做的这么顺!
简单说一下题目的思路吧,最终的必胜态应该是max(a,b)%min(a,b)==0的时候。
但是可以剪枝,由于最终的必胜态和必败态是确定的。我们考虑第一次获得自由度的人。
第一次获得自由度的人可以操控对方的取法。即决定是否迫使对方取走最后一个min(a,b)。
我思考过会不会出现自由度转移到对方的可能。答案是不会!
如果自由度有可能转移是下一步或者下几步发生的事情,为了操控自由度,这一步的操控者可以控制局面。
即通过操控对方的取法获取下一步或者下几步的自由度,从而能重新获取决定权。
即自由度一直被第一次获得自由度的人操控。即:第一次获取自由度的人一定可以达到必胜态。
//#include<bits/stdc++.h>
#include<iostream>
#include<cstdio>
using namespace std;
const int maxn = 1e3 + 10;
int n,m;
int main()
{
while(scanf("%d%d",&n,&m))
{
if(!n && !m)
break;
int top = -1;
while(1)
{
top++;
if(n < m)
swap(n,m);
if((n / m >= 2) || (n % m == 0))
{
if(top & 1)
printf("Ollie wins\n");
else
printf("Stan wins\n");
break;
}
else
{
n = n % m;
}
}
}
return 0;
}