hdu 1525 Euclid's Game 博弈论

思路:两个数a和b,总会出现的一个局面是b,a%b,这是必然的,如果a>=b&&a<2*b,那么只有一种情况,直接到b,a%b。否则有多种情况。

对于a/b==1这种局面,只可能到b,a%b,没有选择。而a/b>=2的话,先手可以选择由谁面对b,a%b这样的局势,先手在a/b>=2的局面必胜

代码如下:

 

 1 #include<stdio.h>

 2 #include<iostream>

 3 #include<algorithm>

 4 #include<cmath>

 5 using namespace std;

 6 int main(){

 7     int a,b,t;

 8     while(scanf("%d%d",&a,&b)!=EOF&&(a+b)){

 9         if(a<b) swap(a,b);

10         bool flag=1;

11         while(1){

12             if(b==0||a%b==0||a/b>=2) break;

13             t=a;

14             a=b;

15             b=t-a;

16             flag=!flag;

17         }

18         puts(flag?"Stan wins":"Ollie wins");

19     }

20     return 0;

21 }
View Code

 

 

你可能感兴趣的:(game)