zoukankan      html  css  js  c++  java
  • HDU 1525 类Bash博弈

    给两数a,b,大的数b = b - a*k,a*k为不大于b的数,重复过程,直到一个数为0时,此时当前操作人胜。

    可以发现如果每次b=b%a,那么GCD的步数决定了先手后手谁胜,而每次GCD的一步过程视为一个子游戏,但是可以发现如果当前可以约的次数大于2,那么此时操作的人可以控制局面,那么考虑所有可约次数大于2的即可。

    /** @Date    : 2017-10-12 21:46:31
      * @FileName: HDU 1525 类bash 博弈.cpp
      * @Platform: Windows
      * @Author  : Lweleth (SoungEarlf@gmail.com)
      * @Link    : https://github.com/
      * @Version : $Id$
      */
    #include <bits/stdc++.h>
    #define LL long long
    #define PII pair
    #define MP(x, y) make_pair((x),(y))
    #define fi first
    #define se second
    #define PB(x) push_back((x))
    #define MMG(x) memset((x), -1,sizeof(x))
    #define MMF(x) memset((x),0,sizeof(x))
    #define MMI(x) memset((x), INF, sizeof(x))
    using namespace std;
    
    const int INF = 0x3f3f3f3f;
    const int N = 1e5+20;
    const double eps = 1e-8;
    
    
    int main()
    {
    	int a, b;
    	while(cin >> a >> b && (a || b))
    	{
    		int flag = 0;
    		if(a < b)
    			swap(a, b);
    		while(a % b != 0 && b != 0)
    		{
    			if(a / b > 1)//可约次数大于2 此时操作的人可以控制局面
    				break;
    			flag ^= 1;
    			a -= b;
    			swap(a, b);
    		}
    		printf("%s wins
    ", flag?"Ollie":"Stan");
    	}
        return 0;
    }
    
  • 相关阅读:
    synchronized关键字jvm实现及各种锁
    zookeeper选举算法
    git远程操作
    git分支的创建与分支之间合并的底层原理
    员工贷项目总结
    Python之字符串操作
    Python实现购物车的功能
    Python列表学习笔记
    Python中如何使用boolean类型的数据
    Python实现用户登录账户
  • 原文地址:https://www.cnblogs.com/Yumesenya/p/7678916.html
Copyright © 2011-2022 走看看