<pre><span style="word-wrap: normal; word-break: normal;"><span style="font-size:18px;">题目大意:</span></span>
给两堆石子(题目中是数,配合一下上文这里说石子),两人依次取石子,规则是:每次从石子数较多的那堆取(两堆石子数目相等时任选一堆),取的数目只能为石子少的那一堆的正整数倍。最后取完一堆石子者胜。问给定情况下先手胜负情况。
//现有状态(x,y) (设x>0且y>0,其它情况自行考虑)
//(1)当x=y时,显然先手胜
//(2)不妨设x<y
//那么(x+y,y)的下一步必定为(x,y),所以(x+y,y)和(x,y)的结果必然
//相反,其中有一种状态可以先手胜,另一种后手胜
//对于任意k>=2,状态(x+ky,y)可以通过从x+ky那堆去掉(k-1)y个石子
//变成(x+y,y),也可以通过从x+ky那堆去掉ky个石子变成(x,y),
//于是这两种选择(注意:这是自主的选择)必然有一种可以获胜,
//所以当k>=2时(x+ky,y)必胜
#include<cstdio>
#include<cstring>
#include<cmath>
#include<ctime>
#include<algorithm>
#include <iostream>
#include <queue>
#include <stack>
#include <vector>
#include <map>
#include <set>
#define INF 0x3f3f3f3f
#define maxn 500100
#define mem(a) memset(a,0,sizeof(a))
using namespace std;
typedef long long ll;
int main()
{
int n,m;
while(scanf("%d%d",&n,&m) && (n+m))
{
int f = 1;
while(1)
{
if(n > m)
swap(n,m);
if(m - n > n)
break;
if(m % n == 0)
break;
m -= n;
f = !f;
}
if(f)
puts("Stan wins");
else
puts("Ollie wins");
}
return 0;
}