1. 程式人生 > >hdu1525 Euclid's Game , 基礎博弈

hdu1525 Euclid's Game , 基礎博弈

post rac 題意 mod 基礎 pan pro game -s

http://acm.hdu.edu.cn/showproblem.php?pid=1525
題意:
兩人博弈,給出兩個數a和b,

較大數減去較小數的隨意倍數。結果不能小於0,將兩個數隨意一個數減到0的為勝者。


題解:
如果a大於b

a == b. N態
a%b == 0. N態
a >= 2*b,先手能決定誰取(b,a%b),而且知道(b,a%b)是P態還是N態. N態

b<a<2*b, 僅僅能 -->(b,a-b) , 然後再進行前面的推斷.


#include<cstdio>
#include<algorithm>
using namespace std;

int main() {
    int a, b;
    while(scanf("%d%d", &a, &b))
    {
        if(a==0&&b==0) break;
        if(a<b)  swap(a,b);
        bool Stan = true;
        while(1)
        {

            if(b==0 ||a%b==0||a/b>=2) break;
            int t = a;
            a = b;
            b = t - a;
            Stan = !Stan;
        }
        if(Stan) printf("Stan wins\n");
        else printf("Ollie wins\n");
    }
    return 0;
}


hdu1525 Euclid&#39;s Game , 基礎博弈