【题目链接】 http://poj.org/problem?id=2348
【题目大意】
给出两个数,两个参赛者轮流用一个数减去另一个数的倍数,当一个数为0的时候游戏获胜,
求先手是否必胜
【题解】
如果出现一个数是另一个数两倍以上的时候,操作者就拥有了一定的自由度,
也就是处于必胜态,那么只要判断谁先到有自由操作的状态或者胜利的状态,谁就必胜。
【代码】
#include <cstdio> #include <algorithm> using namespace std; int a,b; int main(){ while(~scanf("%d%d",&a,&b),a+b){ int f=1; for(;;){ if(a>b)swap(a,b); if(b%a==0)break; if(b-a>a)break; b-=a; f^=1; }if(f)puts("Stan wins"); else puts("Ollie wins"); }return 0; }