zoukankan      html  css  js  c++  java
  • POJ 2348 Euclid's Game【博弈】

    题目链接:

    http://poj.org/problem?id=2348

    题意:

    给定两个数,两个人每次从较大数中减去较小数的倍数,谁先得到0谁获胜,为谁赢?

    分析:

    令一种可能出现的整数对为(a,b),其中(b>a)。有两种情况

    1. ba<a,只能从b中减去一个a,得到状态(ba,a),那么如果(ba,a)是必胜态的话,(ab)就是必败态,反之同理。
    2. ba>a,可以从b中减去至少2个a,假设可以从b中最多可以减去xa,那么从b中减去(x1)a后得到状态(a,b(x1)a),此时即为讨论的第一种情况。如果状态(ab(x1)a)为必败态的话,那么(a,b)就是必胜态,如果状态(a,b(x1)a)为必胜态的话,那么(bxa,a)肯定是必败态,所以直接减去x倍的a,得到必败态,那么(a,b)即为必胜态。

    代码:

    #include<iostream>
    using namespace std;
    int main (void)
    {
        int a, b;
        while(cin>>a>>b && a + b){
           bool res = true;
           if(a > b) swap(a, b);
           while(a != 0){
             if(b % a == 0 || b - a > a) break;
             b -= a;
             res = !res;
             if(a > b) swap(a, b);
           }
           if(res) cout<<"Stan wins"<<endl;
           else cout<<"Ollie wins"<<endl;
        }
        return 0;
    }
    
  • 相关阅读:
    Python2.7-zlib
    Python2.7-sqlite3
    Python2.7-dbm、gdbm、dbhash、bsddb、dumbdb
    Python2.7-anydbm
    Python2.7-marshal
    Python2.7-shelve
    Python2.7-copy_reg
    Python2.7-pickle, cpickle
    Python2.7-shutil
    Python2.7-fnmacth
  • 原文地址:https://www.cnblogs.com/Tuesdayzz/p/5758687.html
Copyright © 2011-2022 走看看