首页 > 其他 > 详细

HDU 1525

时间:2018-07-23 10:08:16      阅读:147      评论:0      收藏:0      [点我收藏+]

题意略。

思路:

我们总是假设a > b,那么现在有两种情况:

1.a - b < b                                      2.a - b >= b

在处于第一种情况下,我们只有一种选择,也即把 a 变成 b,而原有的b变成 a - b。

在第二种情况时,我们分类考虑一下:

1.当 (b,a % b) 为必败态时,我们直接从当前状态转移过去,可以使我们当前状态为必胜态。

2.当 (b,a % b) 为必胜态时,我们直接从当前状态转移到 (a % b + b,b) ,逼迫对手将我们推向必胜态。

也就是说,当 a / b >= 2 时,当前操作的人必胜。

详见代码:

#include<bits/stdc++.h>
using namespace std;

int main(){
    int a,b;
    while(scanf("%d%d",&a,&b) == 2 && (a + b)){
        bool jud = true; 
        if(a < b) swap(a,b);
        while(true){
            if(a / b >= 2 || a % b == 0) break;
            else{
                int temp = a % b;
                a = b,b = temp;
            }
            jud = !jud;
        }
        printf("%s\n",jud ? "Stan wins" : "Ollie wins");
    }
    return 0;
}

 

HDU 1525

原文:https://www.cnblogs.com/tiberius/p/9352865.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!