zoukankan      html  css  js  c++  java
  • HDU 1525 Euclid's Game

    题目

    传送门

    解法

    好妙啊。

    \(n\) 大于 \(m\)

    首先,如果 \(n\)\(m\) 存在倍数关系肯定是先手嬴。

    多举几个例子就会发现,面临 \(n\ge 2m\) 的选手必胜。

    证明就是设 \(n\bmod m=r\)。那么他可以将局面变成 \(m,r\)\(r+m,m\)

    而对于第二种局面,在下一轮另一选手只能变成 \(m,r\),因为题目要求减去 正整数 倍。

    这两种局面等同,且两种局面的面对者不一样,而局面必有一个胜者。所以面临 \(n\ge 2m\) 的选手必胜。

    对于其他情况即 \(m<n<2m\),容易发现只有一种方案,而且每次较大值至少减半,所以直接模拟即可。

    代码

    #include<cstdio>
    #include<iostream>
    using namespace std;
    #define int long long
    
    int n, m, ans;
    
    int read() {
    	int x = 0, f = 1; char s;
    	while((s = getchar()) > '9' || s < '0') if(s == '-') f = -1;
    	while(s >= '0' && s <= '9') {
    		x = (x << 1) + (x << 3) + (s ^ 48);
    		s = getchar();
    	}
    	return x * f;
    }
    
    signed main() {
    	while(n = read(), m = read(), n && m) {
    		ans = 0;
    		if(n > m) swap(n, m);
    		while(n) {
    			if(m % n == 0 || m >= (n << 1)) break;
    			m -= n; swap(n, m);
    			ans ^= 1;
    		}
    		puts(ans ? "Ollie wins" : "Stan wins");
    	}
    	return 0;
    }
    
    
  • 相关阅读:
    MySQL批量UPDATE多行记录
    qt 标准对话框
    qt creator 源代码中含有中文编译报错
    qt编译mysql插件
    win7自动登录桌面
    编译QtAV工程库
    Qt Creator 中关于调试器的设置
    QtCreator 添加第三方头文件库文件路径
    Qt 安装一个Service
    Qt 添加启动项
  • 原文地址:https://www.cnblogs.com/AWhiteWall/p/12322232.html
Copyright © 2011-2022 走看看