这道题先手必胜态有两种确定情况
1. n >= 2 * m (n > m) 此时先手不论怎样都可以得到必胜态
2. n % m == 0 (n >= m) 这种情况较为简单
因此逐步递推得到最终结果
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<vector>
#include<set>
#include<map>
#include<queue>
#include<cmath>
using namespace std;
int main()
{
int m, n;
while(scanf("%d%d",&n,&m) != EOF && (n + m))
{
bool flag;
int cnt = 1;
if(m > n) swap(m, n);
while(m)
{
if(n % m == 0 || n >= 2 * m)
{
flag = cnt % 2;
break;
}
n -= m;
swap(n, m);
cnt ++;
}
if(flag)
printf("Stan wins\n");
else printf("Ollie wins\n");
}
return 0;
}