zoukankan      html  css  js  c++  java
  • POJ 2348 Euclid's Game(博弈论)

    【题目链接】 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;
    }
  • 相关阅读:
    Careercup
    Careercup
    Careercup
    Careercup
    Careercup
    Careercup
    Careercup
    Careercup
    Careercup
    Careercup
  • 原文地址:https://www.cnblogs.com/forever97/p/poj2348.html
Copyright © 2011-2022 走看看