传送门:https://ac.nowcoder.com/acm/contest/283/D

题目描述

小西买了一堆肥宅快乐水和肥宅快乐茶,准备和室友比谁更肥宅。
快乐水有A瓶,快乐茶B瓶。
小西和室友的规则是这样的:
1. 小西先手,轮流到每个人的回合,每个回合只能喝剩余数量较多的饮料
2. 满足规则1的同时,每次只能喝另一种饮料剩余数量的正整数倍
3. 满足1、2的同时,不能超额喝饮料,也就是说剩下2瓶的时候不能喝大于2瓶的数量。
4. 每个人在自己的回合如果能喝完剩下的其中一种饮料,那么就获得胜利。
例如A=10,B=2。
小西只能喝快乐水,且只能喝2/4/6/8/10瓶快乐水。小西可以喝10瓶快乐水直接获得胜利。
小西和室友都是肥宅,所以他们都会才采取为了胜利最优的行动。
现在请你判断小西是否能赢得胜利。

输入描述:

第一行输入一个整数T,表示有T组数据
接下来T行,每行为一组数据,每行有两个正整数表示A和B的初始数量

输出描述:

对于每组数据,若小西可以获得胜利则输出一行“wula”,否则输出一行“mmp”,不需要输出引号
示例1

输入

复制

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 【博弈 分类讨论】...相关推荐

  1. “科林明伦杯”哈尔滨理工大学第十届程序设计竞赛(同步赛) 题解

    "科林明伦杯"哈尔滨理工大学第十届程序设计竞赛(同步赛) 题解 萌新又来写题解啦 原题链接 B 减成一 题意:存在n个数,每次操作可以任选一个区间使得区间内的所有数字减一.问最少多 ...

  2. “科林明伦杯”哈尔滨理工大学第十届程序设计竞赛(同步赛)---全题目+题解

    文章目录 A.点对最大值 B.减成一 C.面积 D.扔硬币 E.赛马 F.三角形 G.养花 H.直线 I.字典序 J.最大值 A.点对最大值 链接:https://ac.nowcoder.com/ac ...

  3. “科林明伦杯”哈尔滨理工大学第十届程序设计竞赛(同步赛) 点对最大值 dp

    链接:https://ac.nowcoder.com/acm/contest/5758/A 来源:牛客网 题目描述 这里有一棵树,每个点和每条边都存在一个价值.对于树上点对的价值,包括点对的起点和终点 ...

  4. “科林明伦杯”哈尔滨理工大学第十届程序设计竞赛(同步赛)

    A.点对最大值 这里有一棵树,每个点和每条边都存在一个价值.对于树上点对的价值,包括点对的起点和终点以及路径上边权值之和,不包括路径上其他点值. 求这颗树上最大的点对价值为多少.点对至少需要两个点. ...

  5. 科林明伦杯”哈尔滨理工大学第十届程序设计竞赛(同步赛)

    比赛网址传送门 目录 A 点对最大值 B 减成一 C 面积 D 扔硬币 E 赛马 F 三角形 G 养花 H 直线 I 字典序 J 最大值 A 点对最大值 求这个树的直径,已经见过三次了,还是没打出来, ...

  6. “科林明伦杯”哈尔滨理工大学第十届程序设计竞赛(同步赛) F

    F 三角形 链接:https://ac.nowcoder.com/acm/contest/5758/F 来源:牛客网 小明有一根长度为a的木棒,现在小明想将木棒分为多段(每段木棒长度必须为整数), 使 ...

  7. “科林明伦杯”哈尔滨理工大学第十届程序设计竞赛(同步赛) E

    E 赛马 一天小明与他同学准备赛马,他们每人有n匹马,每匹马有一个固定的战力值,战力值高的马会战胜战力值低的马并赢得比赛.每匹马只能出场比赛一次.小明偷看到了他对手每匹马的出场顺序,小明在更改自己马出 ...

  8. 江西财经大学第二届程序设计竞赛同步赛 H大时钟 (扩展欧几里得)

    链接:https://ac.nowcoder.com/acm/contest/635/H 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言5242 ...

  9. (江西财经大学第二届程序设计竞赛同步赛)E-是不是复读机

    E-是不是复读机 题目描述: 在复读纪元2140年,复读机(们)已经放弃了如下所示的低级复读方式: "哟,小伙汁,想不到你也是个复读机" "哟,小伙汁,想不到你也是个复读 ...

最新文章

  1. Linux开启动过程详解
  2. [React Router v4] Conditionally Render a Route with the Switch Component
  3. 银屑病相关饮食调研-毛蕊花的药用部位没查清-还需更新
  4. SpringBoot的端口配置server.port没办法设置成Linux的环境变量
  5. Ural 1519. Formula 1 优美的插头DP
  6. ECLIPSE配置OSGI服务器
  7. Linux 开机报 or type Control-D to continue
  8. Linux内核和Linux发行版(了解)
  9. 江淮大众正式更名,今日盘中涨停!
  10. 摄像头,一万块三个,嘿嘿!欢迎来到一年一度iPhone 吐槽大会!
  11. 接口测试--apipost在json中如何使用mock变量
  12. Android Studio开发学习 - 1. 添加Activity
  13. 湖南工程学院毕业论文计算机,bbs毕业设计
  14. 微信小程序踩坑(1):wx.showModal模态对话框中content换行
  15. 软考真题答案-2021年11月系统集成项目管理工程师下午题(一)
  16. 什么是RIA技术,RIA技术概览
  17. html中b和strong的区别,i和em的区别
  18. C语言编程规范(个人整理)
  19. MFC edit control动态设置密码
  20. Tableau 网站流量分析案例之浏览量分析(二)

热门文章

  1. Win7系统很卡应该如何解决?[系统天地]
  2. 贴几张Google Earth的图
  3. javaScript 原型 和 原型链
  4. java过滤微信表情符号_微信隐藏彩蛋!表情加符号就能传递“神秘信息”
  5. 远程桌面设置分辨率的步骤
  6. 中国买苏35贵了5亿美元?答案让你明白中方用心
  7. java 字节码分析_Java 字节码实践 - 解读
  8. 淘宝商品销量接口/淘宝商品销量监控接口/商品累计销量接口代码对接分享
  9. 微信手机网页上传图片高效率压缩(Canvas+Base64)
  10. 内置 DSP,回音消除,噪音抑制全双工通话芯片—ATH8809