洛谷P1290欧几里德游戏
题目地址
题目大意:
两个人st和ol博弈
有两个整数n,m
每次轮到一个人时候,需要选择用大的那个数减去小的那个数的倍数(不能减为负数)
最后得到0的为胜利者
思路:
(以下讨论均在n<m的条件下)
一.
首先考虑一种简单的情况m/n==1
那么每次轮到的人就只有一种选择m-n
然后还满足上述条件,则重复
二.
m/n>=2
假设m=kn+p
假设(n,p)是一个必胜点
当前状态为(n,m)
但是当前的操作者不想把这个必胜点留给对方
所以这个操作者选择转移到(n,m-(k-1)*n) -->(n,n+p)
因为p的范围是[0,n-1]
轮到第二个操作者的时候,他只能选择一种操作(即第一种情况)然后这个必胜点就又回到来一号操作者的手中
假设(n,p)是一个必败点
那么一号操作者可以由(n,m)直接转移到(n,z)把这个必败点留给对方
综上:
n/m>=2时,当前操作者必胜
具体操作:
就是第一种情况就是一直while循环过来循环过去就行, 遇到第二种情况就退出
复杂度不太会分析
这种方法的时间复杂度是多少呢?不难发现,当ii和jj为斐波那契数列的相邻两项时,所需次数最多。得出,复杂度上界略大于O(logn)O(logn)。肯定是不会炸的!
--来自洛谷一位大佬
Code:
n = read(), m = read();
if(n > m) swap(n, m);
if(m / n >= 2)
puts("Stan wins");
else
{
int flag = 1;
while(1)
{
if(n > m) swap(m, n);
if(m % n == 0||m/n>=2) break;
ll t = n;
m -= t;
n = n;
flag = 1 - flag;
}
if(flag)
puts("Stan wins");
else
puts("Ollie wins");
}
洛谷P1290欧几里德游戏的更多相关文章
- 洛谷——P1290 欧几里德的游戏
P1290 欧几里德的游戏 题目描述 欧几里德的两个后代Stan和Ollie正在玩一种数字游戏,这个游戏是他们的祖先欧几里德发明的.给定两个正整数M和N,从Stan开始,从其中较大的一个数,减去较小的 ...
- 洛谷P1290 欧几里德的游戏
题目:https://www.luogu.org/problemnew/show/P1290 只要出现n>=2*m,就可以每次把较大的数控制在较小的数的一倍与二倍之间,则控制了对方的走法: 每次 ...
- 洛谷 P2197 nim游戏
洛谷 P2197 nim游戏 题目描述 甲,乙两个人玩Nim取石子游戏. nim游戏的规则是这样的:地上有n堆石子(每堆石子数量小于10000),每人每次可从任意一堆石子里取出任意多枚石子扔掉,可以取 ...
- 洛谷 P1965 转圈游戏
洛谷 P1965 转圈游戏 传送门 思路 每一轮第 0 号位置上的小伙伴顺时针走到第 m 号位置,第 1 号位置小伙伴走到第 m+1 号位置,--,依此类推,第n − m号位置上的小伙伴走到第 0 号 ...
- 洛谷 P1000 超级玛丽游戏
P1000 超级玛丽游戏 题目背景 本题是洛谷的试机题目,可以帮助了解洛谷的使用. 建议完成本题目后继续尝试P1001.P1008. 题目描述 超级玛丽是一个非常经典的游戏.请你用字符画的形式输出超级 ...
- 【流水调度问题】【邻项交换对比】【Johnson法则】洛谷P1080国王游戏/P1248加工生产调度/P2123皇后游戏/P1541爬山
前提说明,因为我比较菜,关于理论性的证明大部分是搬来其他大佬的,相应地方有注明. 我自己写的部分换颜色来便于区分. 邻项交换对比是求一定条件下的最优排序的思想(个人理解).这部分最近做了一些题,就一起 ...
- $loj10156/$洛谷$2016$ 战略游戏 树形$DP$
洛谷loj Desription Bob 喜欢玩电脑游戏,特别是战略游戏.但是他经常无法找到快速玩过游戏的方法.现在他有个问题. 现在他有座古城堡,古城堡的路形成一棵树.他要在这棵树的节点上放置最少数 ...
- 洛谷P1000 超级玛丽游戏(洛谷新手村1-1-1)
题目背景 本题是洛谷的试机题目,可以帮助了解洛谷的使用. 建议完成本题目后继续尝试P1001.P1008. 题目描述 超级玛丽是一个非常经典的游戏.请你用字符画的形式输出超级玛丽中的一个场景. *** ...
- 洛谷P1080 国王游戏 python解法 - 高精 贪心 排序
洛谷的题目实在是裹脚布 还编的像童话 这题要 "使得获得奖赏最多的大臣,所获奖赏尽可能的少." 看了半天都觉得不像人话 总算理解后 简单说题目的意思就是 根据既定的运算规则 如何排 ...
随机推荐
- Flutter CLI commands All In One
Flutter CLI commands All In One Flutter run key commands. r Hot reload. R Hot restart. h Repeat this ...
- Gatsby Themes
Gatsby Themes React & SSR gatsby-config.js refs https://www.gatsbyjs.com/docs/themes/ https://ww ...
- Raspberry Pi 电路图模拟器
Raspberry Pi 电路图模拟器 Circuit Diagram / Circuit Graph https://fritzing.org/learning/tutorials/building ...
- Python Quiz & Python Exercise
Python Quiz & Python Exercise https://www.w3schools.com/quiztest/quiztest.asp?qtest=PYTHON https ...
- CSS Dark Mode
CSS Dark Mode https://kevq.uk/automatic-dark-mode/ https://kevq.uk/how-to-add-css-dark-mode-to-a-web ...
- js 获取包含emoji的字符串的长度
let emoji_exp = /(\u00a9|\u00ae|[\u2000-\u3300]|\ud83c[\ud000-\udfff]|\ud83d[\ud000-\udfff]|\ud83e[\ ...
- Chrome DevTools & console & filter warning
Chrome DevTools & console & filter warning
- c++ 动态解析PE导出表
测试环境是x86 main #include <iostream> #include <Windows.h> #include <TlHelp32.h> #incl ...
- JS驼峰与下划线互转
1.下划线转驼峰 function underlineToHump(s){ var a = s.split("_"); var result = a[0]; for(var i=1 ...
- Jenkins+Python自动化测试持续集成详细教程
Jenkins是一个开源的软件项目,是基于java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能.由于是基于java开发因此它也依赖jav ...