Vijos 1004 伊甸园日历游戏 博弈
描述
Adam和Eve玩一个游戏,他们先从1900.1.1到2001.11.4这个日期之间随意抽取一个日期出来。然后他们轮流对这个日期进行操作:
1 : 把日期的天数加1,例如1900.1.1变到1900.1.2
2 : 把月份加1,例如:1900.1.1变到1900.2.1
其中如果天数超过应有天数则日期变更到下个月的第1天。月份超过12则变到下一年的1月。而且进行操作二的时候,如果有这样的日期:1900.1.31,则变成了1900.2.31,这样的操作是非法的,我们不允许这样做。而且所有的操作均要考虑历法和闰年的规定。
谁先将日期变到2001.11.4谁就赢了。
每次游戏都是Adam先操作,问他有没有必胜策略?
格式
输入格式
一个测试点。多组数据。
第一行为数据组数。
接下来一行X Y Z表示X年Y月Z日
输出格式
输出“YES”or“NO”表示亚当是否有必胜策略。
样例1
样例输入1
3
2001 11 3
2001 11 2
2001 10 3
样例输出1
YES
NO
NO
题解
这道题目可以由必胜态和必败态的思想来解决。
我们可以发现,对于大多数情况,我们不管是增加月数或者是增加日数,都会造成(月数+日数)的奇偶性发生变化。
2011.11.4的(月数+日数)=(11+4)为奇数,所以我们只要保持自己的(月数+日数)为偶数则能致胜。
我们来分析所有的(月数+日数)为偶数的状态,看看有没有可能在某种状态下会发生:(月数+日数)--> (月数+日数)
即:我出之前是偶数状态,出之后还是偶数状态,那么这个时候我就会从必胜态转到必败态了(即让对手进入了必胜态)。
这种情况只可能发生在不能增加月份而只能增加日数,并且增加一天后变到了下个月的1号的时候,那么这种情况有:
1.31 --> 2.1 (偶数状态转为奇数状态)
2.28 --> 3.1 (不必须,可以2.28 --> 3.28)
3.31 --> 4.1 (偶数状态转为奇数状态)
4.30 --> 5.1 (不必须,可以4.30 --> 5.30)
5.31 --> 6.1 (偶数状态转为奇数状态)
6.30 --> 7.1 (不必须,可以6.30 --> 7.30)
7.31 --> 8.1 (偶数状态转为奇数状态)
所以可以发现,如果我的(月数+日数)为偶数,则我毕为必胜态。
然后来分析一下有没有可能让我的状态从必败态转为必胜态。
因为之前分析过:所有的(月数+日数)为偶数的状态都为必胜态,所以如果我的对手处于必胜态了,则我肯定要输了;所以我只能在第一次出的阶段将对手转到必败态。这种情况刚好也对应着当前(月数+日数)为奇数 并且 不能增加月份而只能增加日数,并且增加一天后变到了下个月的1号的时候,我们来分析这些情况:
2.29 --> 3.1 (奇数状态转为偶数状态,必败态)
8.31 --> 9.1 (奇数状态转为偶数状态,必败态)
9.30 --> 10.1 (奇数状态转为奇数状态,可行)
10.31 --> 11.1 (奇数状态转为偶数状态,必败态)
11.30 --> 12.1 (奇数状态转为奇数状态,可行)
12.31 --> 1.1 (奇数状态转为偶数状态,必败态)
所以我们可以发现,9.30和11.30这两天对我来说是必胜态。
综上所述:所有(月数+日数)为偶数的日期和9.30,11.30这两天我是必胜态,其余时间我是必败态。
代码如下:
#include <iostream>
using namespace std;
int T, x, y, z;
int main()
{cin >> T;while (T--){cin >> x >> y >> z;if ((y+z)%2 == 0 || (y == 9 || y == 11) && z == 30){cout << "YES" << endl;}else{cout << "NO" << endl;}}return 0;
}
转载于:https://www.cnblogs.com/xianyue/p/6939675.html
Vijos 1004 伊甸园日历游戏 博弈相关推荐
- P1512 伊甸园日历游戏
题目 题目描述 Adam和Eve玩一个游戏,他们先从1900.1.1到2006.11.4这个日期之间随意抽取一个日期出来.然后他们轮流对这个日期进行操作: 1 : 把日期的天数加1,例如1900.1. ...
- 小花梨的取石子游戏 ( 博弈 )
欢迎访问https://blog.csdn.net/lxt_Lucia-- 宇宙第一小仙女\(^o^)/-萌量爆表求带飞=≡Σ((( つ^o^)つ~ dalao们点个关注呗- ------------ ...
- poj 1067 取石子游戏(博弈+威佐夫博奕(Wythoff Game))
取石子游戏 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 29959 Accepted: 9818 Descriptio ...
- Calendar Game POJ - 1082(关于日历的博弈问题)
题意: 两个人轮流玩游戏,每个人可以把日期进行转移,转移规则: 1.可以转移到当前日期的下一天. 2可以转移到下个月的这一天.(但是如果下个月没有这一天就不能进行第二种转移) 3.如果A恰好移动到20 ...
- 对弈(nim-k游戏博弈)
problem AliceAliceAlice 和 BobBobBob 又在玩游戏. AliceAliceAlice 和 BobBobBob 在一个 1×n1\times n1×n 的网格图上玩游戏, ...
- Vijos P1196吃糖果游戏[组合游戏]
描述 Matrix67和Shadow正在做一个小游戏. 桌子上放着两堆糖果,Matrix67和Shadow轮流对这些糖果进行操作.在每一次操作中,操作者需要吃掉其中一堆糖果,并且把另一堆糖果分成两堆( ...
- BZOJ 1413: [ZJOI2009]取石子游戏 博弈+Dp
title BZOJ 1413 Description 在研究过Nim游戏及各种变种之后,Orez又发现了一种全新的取石子游戏,这个游戏是这样的: 有n堆石子,将这n堆石子摆成一排.游戏由两个人进行, ...
- 龙珠游戏-博弈之斐波那契数列
来源:GZHU-Problem 1516 校园内网-传送门 Problem Description 终于!你集齐了七颗龙珠! 你使用七颗龙珠召唤了神龙,想要许一个愿望. [我的愿望是,请给我一个lao ...
- (转载)Nim游戏博弈(收集完全版)
Nim游戏的概述: 还记得这个游戏吗? 给出n列珍珠,两人轮流取珍珠,每次在某一列中取至少1颗珍珠,但不能在两列中取.最后拿光珍珠的人输. 后来,在一份资料上看到,这种游戏称为"拈(Nim) ...
- 51nod 1430:奇偶游戏 博弈
1430 奇偶游戏 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 160 难度:6级算法题 收藏 关注 有n个城市,第i个城市有ai个人.Dae ...
最新文章
- python实现shell_基于 Python 的简易 Shell 实现
- 学了redis我能拿你做什么
- Mybatis多条件直接查询Param注解版
- java后台处理excel_java后台利用Apache poi 生成excel文档提供前台下载示例
- 组装电脑配置单报价_组装电脑配置单推荐,性价比高的游戏、画图和办公全能配置电脑!...
- C++ Primer笔记整理
- 抖音用计算机弹曲子,抖音计算机乐谱有哪些?抖音计算机乐谱大全分享
- Linux 常用但较容易忘记的命令
- nc加载不了java,用友NC系统使用过程中常见问题和解决方法
- 学生用计算机重启,如何使学校的电脑在重启后不自动还原系统?
- 怎么在电脑上进行屏幕录像?电脑录屏的方法
- python3解析纯真ip数据库
- 亲历2010中国移动开发者大会
- 亮宁机器人套件_十大可编程机器人教育套件
- Java-Web总结03
- 白平衡一直标定不准的原因是什么?
- git之删除仓库文件
- C++ QT开发人机象棋(评估函数)
- 说说dota、人生、程序(长篇、神经质)
- DWZ 用dialog调用MVC自动生成的密码修改页面一直出现“数据加载中,请稍等...”和去掉“数据加载中,请稍等”的方法