首页 > 其他 > 详细

HDU 1525 Euclid's Game

时间:2017-01-13 23:29:12      阅读:216      评论:0      收藏:0      [点我收藏+]

题目大意:

题目给出了两个正数a.b

每次操作,大的数减掉小的数的整数倍。一个数变为0 的时候结束。

谁先先把其中一个数减为0的获胜。问谁可以赢。Stan是先手。

 

题目思路:

无论a,b的值为多少,局面:[a%b,b] 一定会出现。

双方都足够聪明,无论谁都知道这种局面是必胜局面还是必败局面

若是必败局面操作者为了获胜,直接到达[a%b,b]局面就可以(将必败局留给对方)

若是必胜局操作者为了获胜,到达[a%b+b,b]局面(经过对手操作后,将必胜局面留给自己)

 

技术分享
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<iostream>
#include<algorithm>
#define INF 0x3f3f3f3f
#define MAXSIZE 100005

using namespace std;

int Game(int a,int b)
{
    int op=1;
    while(1)
    {
        if(a < b) swap(a,b);
        if(a%b==0 || a/b>=2) break;
        while(a>b && a<2*b)
        {
            a-=b;
            op=-op;
            //swap(a,b);
        }
    }
    return op;
}

int main()
{
    int a,b;
    while(scanf("%d%d",&a,&b),a+b)
    {
        int op=Game(a,b);
        if(op==1)
            printf("Stan wins\n");
        else
            printf("Ollie wins\n");
    }
    return 0;
}
View Code

 

HDU 1525 Euclid's Game

原文:http://www.cnblogs.com/alan-W/p/6284209.html

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