【牛客 - 373A】翻硬币问题(博弈,结论,分析)
题干:
链接:https://ac.nowcoder.com/acm/contest/373/A
来源:牛客网
Alice和Bob正在玩一个很经典的游戏。
有 n n个硬币初始时全部正面朝上,每一轮Alice必须选择其中任意的恰好 m m枚硬币并将它们全部翻转,如果若干轮翻转后所有硬币全部反面朝上,那么Alice就赢得了游戏。
假设我们认为每枚硬币只有正面朝上和反面朝上两种状态且只考虑 m m为偶数的情况,问题会比较简单。
但是出题人希望这道题更毒瘤一些,所以他增加了一条规则:Bob在整个游戏中可以有一次机会使坏--在Alice某一轮翻转完之后,偷偷选择任意一枚硬币并将它翻转。
为了不让Alice赢得游戏,Bob会采取最优的策略。
现在给定 n n和 m m,请问Alice是否可以赢得游戏?
注意:
- Bob虽然可以在任何轮翻转之后使坏,但是在整个游戏中只有一次这样的机会。也就是说,如果在某一轮之后使用了这个机会,那么以后都不能再使用。
- 轮次可以认为是无限的,只要在任何一轮翻转后所有硬币全部反面朝上,Alice就立即赢得游戏胜利,Bob即使没有用掉使坏的机会也不能再偷偷翻转硬币。
输入描述:
每个输入文件有多个测试样例。
第一行一个整数 T(T≤30000) T(T≤30000)--测试样例个数。
然后 T T行,每行两个整数 n n和 m m (1≤m≤n≤109,m是偶数) (1≤m≤n≤109,m是偶数)--硬币的数量和每一轮翻转硬币的数量。其中第 i+1 i+1行表示第 i i个样例。
输出描述:
输出 T T行,第 i i行输出第 i i个测试样例的答案。
如果Alice可以赢得游戏输出“Yes”,否则输出“No”,请注意区分大小写。
示例1
输入
复制
2 2 2 8 6
输出
复制
Yes No
说明
对于第一个样例,Alice直接一轮翻转全部两个硬币就可以赢得游戏。对于第二个样例,Bob如果在第一轮结束后将任意一枚反面朝上的硬币翻转,之后Alice无论怎样翻转硬币也永远不能使得所有硬币全部反面朝上。
解题报告:
如果要赢,只能第一次就翻出结果来,否则就输。作者:lililalala
证明:
一回合不能直接翻转所有硬币,因为m是偶数,所以只需要讨论n的奇偶性。
(1)n是奇数
某回合结束后所有硬币反面朝上可以等价于所有硬币都被翻转了奇数次。假设可以达成,那么
该回合后所有回合总翻转次数一定要为奇数(因为奇数个奇数相加是奇数)
然而m是偶数,即使在不使坏的情况下,无论翻转多少个回合,总翻转次数也一定是偶数,
所以在这种情况下是不可能赢得游戏的.答案是No
(2)n是偶数
同理,完成时所有硬币都一定要被翻转了奇数次,但是n是偶数,所以总翻转次数一定要为偶
数,在不被使坏的情况下,至少有可能完成,但是除去n=m的情况外,只要在第一回合后立即
被使坏,不管翻转哪一个硬币,都会使得总翻转次数由总是偶数变成总是奇数,和n为奇数
时原理相同,也不可能赢得游戏,答案是No
结论: n=m时答案是Yes,否则答案是No
AC代码:
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<map>
#include<vector>
#include<set>
#include<string>
#include<cmath>
#include<cstring>
#define ll long long
#define pb push_back
#define pm make_pair
using namespace std;
ll n,m;
int main()
{int t;cin>>t;while(t--) {scanf("%lld%lld",&n,&m);if(n == m) puts("Yes");else puts("No");}return 0 ;}
【牛客 - 373A】翻硬币问题(博弈,结论,分析)相关推荐
- 牛客14355 翻硬币
链接:https://ac.nowcoder.com/acm/problem/14355 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536 ...
- 牛客小白月赛3 C.博弈
牛客小白月赛3 C.博弈 题目链接 题目描述 XHRlyb 在和 Cwbc 玩游戏. 在一个多重集合中有在 [l,r] 中的全部整数各一个,即 l,l+1,l+2,......,rl,l+1,l+2, ...
- 【牛客小白月赛69】题解与分析A-F【蛋挞】【玩具】【开题顺序】【旅游】【等腰三角形(easy)】【等腰三角形(hard)】
比赛传送门:https://ac.nowcoder.com/acm/contest/52441 感觉整体难度有点偏大.
- 浅谈 翻硬币游戏【Nim博弈】
ACM博客_kuangbin 博弈-翻硬币游戏 hihoCoder 1172 : 博弈游戏·Nim游戏·二 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 Alice和B ...
- 牛客网 2018年全国多校算法寒假训练营练习比赛(第三场)D.小牛vs小客-博弈
菜哭... D.小牛vs小客 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536K 64bit IO Format: %lld 链接:https://ww ...
- 牛客练习赛33 D tokitsukaze and Inverse Number (树状数组求逆序对,结论)
链接:https://ac.nowcoder.com/acm/contest/308/D 来源:牛客网 tokitsukaze and Inverse Number 时间限制:C/C++ 1秒,其他语 ...
- 牛客练习赛31 B 赞迪卡之声妮莎与奥札奇(逻辑+博弈) B
链接:https://ac.nowcoder.com/acm/contest/218/B 来源:牛客网 赞迪卡之声妮莎与奥札奇 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 2621 ...
- 牛客小白月赛16 小石的签到题(博弈)
牛客小白月赛16 小石的签到题 链接:https://ac.nowcoder.com/acm/contest/949/A来源:牛客网 题目描述 输入描述: 共一行,输入一个数 nnn . 输出描述: ...
- 【牛客 - 551F】CSL 的神奇序列(推公式,猜结论,母函数)
题干: 链接:https://ac.nowcoder.com/acm/contest/551/F 来源:牛客网 题目描述 CSL 有一个神奇的无穷实数序列,他的每一项满足如下关系: 对于任意的正整数 ...
最新文章
- Java 命名规范(非常全面)
- 我把负载均衡讲出了花,领导却不给我涨工资
- 前端验证码后端返回一个图片_Web后端开发(6)——简易图片验证码的制作
- CloudFlare 免费CDN加速 使用方法
- C# 可访问性不一致问题(修改成员的访问修饰符)。
- 数字证书——密码学笔记(六)
- 队列链式结构C/C++实现(数据结构严蔚敏版)
- 如何判断数据背离正态分布?
- c++bisection method二等分法的实现算法(附完整源码)
- java.lang.IllegalStateException: attempt to re-open an already-closed object
- 生成器作为(快速失败)状态机
- python openoffice_使用Python创建openoffice .odt文档
- mysql 局部变量集合_mysql全局变量和局部变量
- 使用 jdk 1.8 lambda forEach 对 ArrayList 遍历,数组越界,索引是负数 -15591
- 更改访问局域网win7计算机的用户,win7局域网共享设置 win7局域网共享设置方法...
- LOVE2D中实现一个简单的摇杆
- mysql报表服务器配置_Power Bi报表服务器安装及数据库配置方法
- 用python怎么读文件_python怎么读文件
- Error Code: 1175. You are using safe update...
- 大林算法计算机控制实验报告,实验二 大林算法实验报告
热门文章
- 1218. 最长定差子序列
- CF#420 B. Okabe and Banana Trees 思维|暴力|几何
- 用类来实现输入输出时间,定义多个类对象分别输入输出各对象的时间(时:分:秒),使用函数,数据成员不再由键盘输入,而在调用函数时由实参给出,并在函数中使用默认参数
- Android11怎么截屏,对标IOS?Android11或无缘屏幕长截图
- mysql innodb redolog_MySQL · 引擎特性 · InnoDB redo log漫游(转)
- 印象笔记mac版 同步问题_印象笔记表示 今年将大幅提升产品体验
- sql查询php,SQL查询或PHP?
- python写的程序怎么打包成exe_python--- 如何将自己的程序打包成exe ?
- table 表格点击当前行按钮隐藏当前的另一个按钮_Excel表格为什么那么慢已经应该如何解决(四)一类特殊的函数易变函数(volatile function)...
- python判断字符串长度_Python|判断字符串是否符合日期要求