当前位置:编程学习 > C/C++ >>

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这样的局势
显然选手足够聪明b,a%b谁必胜必败已经清楚,先手在a/b>=2的局面必胜
[cpp]
#include<iostream> 
#include<cstdio> 
#include<cstring> 
#include<algorithm> 
#include<cmath> 
#include<vector> 
#include<string> 
#include<map> 
#define LL long long 
#define N 1000000 
#define inf 1<<20 
using namespace std; 
int main(){ 
    int a,b; 
    while(scanf("%d%d",&a,&b)!=EOF&&a+b){ 
        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 www.zzzyk.com
            printf("Ollie wins\n"); 
    } 
    return 0; 

     

作者:ACM_cxlove
补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,