HDU - 1525
题意:给你两个数,a,b,有两个人轮流进行一次操作, 每次操作可以将大的数减去k倍的小的数,最后不能操作的人输了,问你谁赢了。
思路:我们可以用辗转相除法求出对于每一个状态可以改变几次,这样问题就变成了给你若干堆石子,只能将前面堆的石子全部取完啦才能
取当前堆的石子,对于每一堆来说能取任意个,最后不能取的人失败,从后往前必败必胜推一下就好啦。
1 #include<bits/stdc++.h> 2 #define LL long long 3 #define fi first 4 #define se second 5 #define mk make_pair 6 using namespace std; 7 8 const int N=1e5+7; 9 const int M=100+7; 10 const int inf=0x3f3f3f3f; 11 const LL INF=0x3f3f3f3f3f3f3f3f; 12 const int mod=1e9 + 9; 13 14 vector<int> v; 15 bool flag[N]; 16 17 int gcd(int a, int b) { 18 if(!b) return a; 19 v.push_back(a / b); 20 return gcd(b, a % b); 21 } 22 23 int main() { 24 int a, b, n; 25 while(scanf("%d%d", &a, &b) != EOF && a) { 26 if(a < b) swap(a, b); 27 v.clear(); 28 gcd(a, b); 29 n = v.size(); 30 flag[n - 1] = true; 31 for(int i = n - 2; i >= 0; i--) { 32 if(flag[i + 1]) { 33 if(v[i] > 1) { 34 flag[i] = true; 35 } else { 36 flag[i] = false; 37 } 38 } else { 39 flag[i] = true; 40 } 41 } 42 if(flag[0]) puts("Stan wins"); 43 else puts("Ollie wins"); 44 } 45 return 0; 46 } 47 /*************** 48 ****************/
转载于:https://www.cnblogs.com/CJLHY/p/8908209.html
HDU - 1525相关推荐
- hdu 1525 Euclid‘s Game
hdu 1525 文章目录 Problem Description 题意: 题解: 代码: Problem Description Two players, Stan and Ollie, play, ...
- HDU 1525 类Bash博弈
给两数a,b,大的数b = b - a*k,a*k为不大于b的数,重复过程,直到一个数为0时,此时当前操作人胜. 可以发现如果每次b=b%a,那么GCD的步数决定了先手后手谁胜,而每次GCD的一步过程 ...
- HDU 1525 - Euclid's Game ( 博弈 )
题意 Stan和Ollie玩游戏,Stan先手.给出两个数字,可以用大数减去小数的整数倍,要求不能减到小于0.谁先将一个数字减到0,谁获胜. 思路 博弈 假设 a > b 比赛的时候想到了关于a ...
- HDU 1525 Euclid's Game
题目大意: 题目给出了两个正数a.b 每次操作,大的数减掉小的数的整数倍.一个数变为0 的时候结束. 谁先先把其中一个数减为0的获胜.问谁可以赢.Stan是先手. 题目思路: 无论a,b的值为多少,局 ...
- 【 HDU - 1525 】Euclid's Game(较难找规律,玄学博弈,分析必败点必胜点)
题干: Two players, Stan and Ollie, play, starting with two natural numbers. Stan, the first player, su ...
- hdu 1525 博弈
欧几里德问题上的博弈,理解后不难. /* * hdu1525/win.cpp * Created on: 2011-11-11 * Author : ben*/#include <cstdio& ...
- [kuangbin]各种各样的题单
[kuangbin]各种各样的题单 专题1 简单搜索 POJ 1321 POJ 2251 POJ 3278 POJ 3279 POJ 1426 POJ 3126 POJ 3087 POJ 3414 F ...
- 一起开心2020暑假训练第一周
hdu 1576 A/B oj传送 题解: Poj 1061 青蛙的约会 oj传送 题解: hdu 1525 Euclid's Game oj传送 题解: Poj 3070 Fibonacci oj传 ...
- 每日打卡 2017.04.02 博弈论专题
https://vjudge.net/contest/156519#overview 打表:比如求斐波那契的第k项,k<=1000,很多case,这时可以预处理的时候把1-1000全部求出来并储 ...
最新文章
- python求1到n的乘积_Python简单实现两个任意字符串乘积的方法示例
- 痛苦的老师开心的我们
- Boost Asio总结(5)class tcp
- SAP Commerce开发时的Spring学习要点记录
- 一个 SQL 同时验证帐号是否存在、密码是否正确
- arduino串口输入改变模式模块
- 第一百八十四节,jQuery-UI,验证注册表单
- mysql驱动包放在ecplise哪里_eclipse导入mysql jdbc驱动包的具体步骤及注意事项
- android4.0以上,利用耳机接听键实现自动接听,部分手机失败原因+解决方法(比如华为P7)
- RENIX 软件如何进行IP地址管理——网络测试仪实操
- AndroidSDK和ADT下载地址
- 面对裁员潮,程序员如何安身立命
- 2022年终总结与2023新年展望
- 第一行代码-第二版(郭霖著)笔记十(Service)
- 汇佳学校新推“未来艺术大师”项目 实现学术艺术双赢
- IE与非IE浏览器调用PC摄像头拍摄并且上传
- KMeans聚类 K值的确定以及初始类簇中心点的选取
- com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `com.lxw
- 递归入门(C语言实现)
- 利用Word解锁注册表