“东信杯”广西大学第一届程序设计竞赛(同步赛)D、数论只会GCD 【博弈 分类讨论】...
传送门:https://ac.nowcoder.com/acm/contest/283/D
题目描述
输入描述:
输出描述:
对于每组数据,若小西可以获得胜利则输出一行“wula”,否则输出一行“mmp”,不需要输出引号
输入
复制
2 20 18 10 4
输出
复制
mmp wula
题意概括:如题
解题思路:
模拟一遍,博弈的规律很清晰。
处理一下保证 A > B,并且两者除掉GCD缩小范围,最后得出结果是等价的(两者除以相同倍数,和每次做减法是减少相同的数,对最后能否整除没有影响)。
递归判断 cheak(A, B,cnt)是先手赢或是后手赢,cnt用于记录奇偶性(由当前结果回溯到最初的结果)
①如果当前 A%B == 0 先手赢
②如果当前 A/B >= 2 先手赢 (因为我存在至少两种选择,里面必有一种是失败的,而另外一种肯定是胜利的)
为什么呢?
如果A/B == 2 ,我们至少拥有减 2 个 B的权利,如果我减一个B最后导致我失败了对手胜利了,那我肯定减两个B,就相当于我通过多减一个B跳过了一步,而我成为了成功的那个对手。
如果减一个B成功了,那就成功啦
如果 A/B > 2, 我们其实还是回到上面的结论,减一个或减两个,其余的都是附加在这一个或者两个上的,保证奇偶性即可。
③以上两种情况不满足说明当前状态无法判断谁会获胜,需要做一次减法 A-B,递归 cheak( A-B,B,++cnt)或者check(B,A-B,++cnt)判断接下来那个会获胜,因为记录了奇偶性,最后可以回溯到最初状态。
AC code:
1 #include <cstdio> 2 #include <iostream> 3 #include <cstring> 4 #include <algorithm> 5 #define LL long long 6 using namespace std; 7 LL a, b; 8 9 LL GCD(LL a, LL b) 10 { 11 if(b == 0) return a; 12 return GCD(b, a%b); 13 } 14 15 bool check(LL A, LL B, LL cnt) 16 { 17 LL gg = GCD(A, B); 18 A = A/gg; 19 B = B/gg; 20 LL t = A/B; 21 if(A%B == 0) { 22 if(cnt%2LL) return true; 23 else return false; 24 } 25 else if(t >= 2){ 26 27 if(cnt%2LL) return true; 28 else return false; 29 30 } 31 else{ 32 if(B%(A-B) == 0) { 33 if(cnt%2LL)return false; 34 else return true; 35 } 36 else{ 37 if(B > (A-B)) return check(B, (A-B), ++cnt); 38 else return check((A-B), B, ++cnt); 39 } 40 } 41 return true; 42 } 43 44 int main() 45 { 46 int T_case; 47 LL tt, cnt = 1LL; 48 LL G; 49 scanf("%d", &T_case); 50 while(T_case--){ 51 cnt = 1LL; 52 scanf("%lld %lld", &a, &b); 53 if(a < b) swap(a, b); 54 if(a%b == 0) puts("wula"); 55 else{ 56 G = GCD(a, b); 57 a = a/G; 58 b = b/G; 59 if(check(a, b, 1LL)) puts("wula"); 60 else puts("mmp"); 61 } 62 } 63 return 0; 64 }
View Code
“东信杯”广西大学第一届程序设计竞赛(同步赛)D、数论只会GCD 【博弈 分类讨论】...相关推荐
- “科林明伦杯”哈尔滨理工大学第十届程序设计竞赛(同步赛) 题解
"科林明伦杯"哈尔滨理工大学第十届程序设计竞赛(同步赛) 题解 萌新又来写题解啦 原题链接 B 减成一 题意:存在n个数,每次操作可以任选一个区间使得区间内的所有数字减一.问最少多 ...
- “科林明伦杯”哈尔滨理工大学第十届程序设计竞赛(同步赛)---全题目+题解
文章目录 A.点对最大值 B.减成一 C.面积 D.扔硬币 E.赛马 F.三角形 G.养花 H.直线 I.字典序 J.最大值 A.点对最大值 链接:https://ac.nowcoder.com/ac ...
- “科林明伦杯”哈尔滨理工大学第十届程序设计竞赛(同步赛) 点对最大值 dp
链接:https://ac.nowcoder.com/acm/contest/5758/A 来源:牛客网 题目描述 这里有一棵树,每个点和每条边都存在一个价值.对于树上点对的价值,包括点对的起点和终点 ...
- “科林明伦杯”哈尔滨理工大学第十届程序设计竞赛(同步赛)
A.点对最大值 这里有一棵树,每个点和每条边都存在一个价值.对于树上点对的价值,包括点对的起点和终点以及路径上边权值之和,不包括路径上其他点值. 求这颗树上最大的点对价值为多少.点对至少需要两个点. ...
- 科林明伦杯”哈尔滨理工大学第十届程序设计竞赛(同步赛)
比赛网址传送门 目录 A 点对最大值 B 减成一 C 面积 D 扔硬币 E 赛马 F 三角形 G 养花 H 直线 I 字典序 J 最大值 A 点对最大值 求这个树的直径,已经见过三次了,还是没打出来, ...
- “科林明伦杯”哈尔滨理工大学第十届程序设计竞赛(同步赛) F
F 三角形 链接:https://ac.nowcoder.com/acm/contest/5758/F 来源:牛客网 小明有一根长度为a的木棒,现在小明想将木棒分为多段(每段木棒长度必须为整数), 使 ...
- “科林明伦杯”哈尔滨理工大学第十届程序设计竞赛(同步赛) E
E 赛马 一天小明与他同学准备赛马,他们每人有n匹马,每匹马有一个固定的战力值,战力值高的马会战胜战力值低的马并赢得比赛.每匹马只能出场比赛一次.小明偷看到了他对手每匹马的出场顺序,小明在更改自己马出 ...
- 江西财经大学第二届程序设计竞赛同步赛 H大时钟 (扩展欧几里得)
链接:https://ac.nowcoder.com/acm/contest/635/H 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言5242 ...
- (江西财经大学第二届程序设计竞赛同步赛)E-是不是复读机
E-是不是复读机 题目描述: 在复读纪元2140年,复读机(们)已经放弃了如下所示的低级复读方式: "哟,小伙汁,想不到你也是个复读机" "哟,小伙汁,想不到你也是个复读 ...
最新文章
- Linux开启动过程详解
- [React Router v4] Conditionally Render a Route with the Switch Component
- 银屑病相关饮食调研-毛蕊花的药用部位没查清-还需更新
- SpringBoot的端口配置server.port没办法设置成Linux的环境变量
- Ural 1519. Formula 1 优美的插头DP
- ECLIPSE配置OSGI服务器
- Linux 开机报 or type Control-D to continue
- Linux内核和Linux发行版(了解)
- 江淮大众正式更名,今日盘中涨停!
- 摄像头,一万块三个,嘿嘿!欢迎来到一年一度iPhone 吐槽大会!
- 接口测试--apipost在json中如何使用mock变量
- Android Studio开发学习 - 1. 添加Activity
- 湖南工程学院毕业论文计算机,bbs毕业设计
- 微信小程序踩坑(1):wx.showModal模态对话框中content换行
- 软考真题答案-2021年11月系统集成项目管理工程师下午题(一)
- 什么是RIA技术,RIA技术概览
- html中b和strong的区别,i和em的区别
- C语言编程规范(个人整理)
- MFC edit control动态设置密码
- Tableau 网站流量分析案例之浏览量分析(二)
热门文章
- Win7系统很卡应该如何解决?[系统天地]
- 贴几张Google Earth的图
- javaScript 原型 和 原型链
- java过滤微信表情符号_微信隐藏彩蛋!表情加符号就能传递“神秘信息”
- 远程桌面设置分辨率的步骤
- 中国买苏35贵了5亿美元?答案让你明白中方用心
- java 字节码分析_Java 字节码实践 - 解读
- 淘宝商品销量接口/淘宝商品销量监控接口/商品累计销量接口代码对接分享
- 微信手机网页上传图片高效率压缩(Canvas+Base64)
- 内置 DSP,回音消除,噪音抑制全双工通话芯片—ATH8809