HDU 1525 Euclid's Game(博弈)

来源:互联网 发布:淘宝店铺没有按时复核 编辑:程序博客网 时间:2024/05/18 13:27

题意:给出正整数a,b,每次可以用大的数减去小的数的倍数,最后谁操作完出现0就赢

思路:自己模拟一下,显然会出现一个局面是变成b,a%b,如果a==b或者a%b==0那么先手必胜,a>=2b那么先手可以把它变成b,a%b也是先手必胜,而b<a<2b这种就看谁先能拿到必胜的局面


#include<bits/stdc++.h>using namespace std;int main(){int a,b;while(scanf("%d%d",&a,&b)!=EOF && (a+b)){if(a<b)swap(a,b);int flag = 1;while(b){if(a==b||a>=2*b)break;a = a-b;if(a<b)swap(a,b);flag=!flag;}if(flag)cout << "Stan wins" << endl;elsecout << "Ollie wins" << endl;}}


Description

Two players, Stan and Ollie, play, starting with two natural numbers. Stan, the first player, subtracts any positive multiple of the lesser of the two numbers from the greater of the two numbers, provided that the resulting number must be nonnegative. Then Ollie, the second player, does the same with the two resulting numbers, then Stan, etc., alternately, until one player is able to subtract a multiple of the lesser number from the greater to reach 0, and thereby wins. For example, the players may start with (25,7): 

25 7 
11 7 
4 7 
4 3 
1 3 
1 0 

an Stan wins. 

 

Input

The input consists of a number of lines. Each line contains two positive integers giving the starting two numbers of the game. Stan always starts.
 

Output

For each line of input, output one line saying either Stan wins or Ollie wins assuming that both of them play perfectly. The last line of input contains two zeroes and should not be processed. 

 

Sample Input

34 1215 240 0
 

Sample Output

Stan winsOllie wins
 


0 0