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;
}
Vijos 1004 伊甸园日历游戏 博弈的更多相关文章
- vijos 1004 伊甸园日历游戏 博弈+打表找规律
描述 Adam和Eve玩一个游戏,他们先从1900.1.1到2001.11.4这个日期之间随意抽取一个日期出来.然后他们轮流对这个日期进行操作: 1 : 把日期的天数加1,例如1900.1.1变到19 ...
- LUOGU P1512 伊甸园日历游戏
题目描述 Adam和Eve玩一个游戏,他们先从1900.1.1到2001.11.4这个日期之间随意抽取一个日期出来.然后他们轮流对这个日期进行操作: 1 : 把日期的天数加1,例如1900.1.1变到 ...
- 【noip模拟题】日历游戏(博弈论+搜索)
直接搜索即可... 注意不要爆栈..所以我们可以分块搜索... 然后太懒且太弱我就不写了... orz hzwer http://hzwer.com/4954.html [问题描述] moreD和mo ...
- 洛谷P1512伊甸园的日历游戏题解
题目 因为可能要参加qbxt的数论考试,所以最近要开始猛刷数论题了. 这是第一道,不过看样子并不想数论题啊,只是一个博弈论. 思路 一位著名老师说过,数学就是转化和化简,所以先考虑化简,先考虑化简年份 ...
- tyvj P1075 - 硬币游戏 博弈DP
P1075 - 硬币游戏 From price Normal (OI)总时限:10s 内存限制:128MB 代码长度限制:64KB 背景 Background 农民John的牛喜欢玩 ...
- BZOJ 1411&&Vijos 1544 : [ZJOI2009]硬币游戏【递推,快速幂】
1411: [ZJOI2009]硬币游戏 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 897 Solved: 394[Submit][Status ...
- 计蒜客 取数游戏 博弈+dp
题目链接 取数游戏 思路:dp(x, y)表示先手在区间[x, y]能取得的最大分数.当先手取完,就轮到后手去,后手一定会选择当前能令他得到最大分数的策略,其实当先手在[x, y]区间两端取走一个数, ...
- Nim游戏博弈(收集完全版)
Nim游戏证明参见: 刘汝佳训练指南P135-写的很酷! 知乎上SimonS关于Nim博弈的回答! Nim游戏的概述: 还记得这个游戏吗? 给出n列珍珠,两人轮流取珍珠,每次在某一列中取至少1颗珍珠, ...
- 51 Nod 1430 奇偶游戏(博弈)
1430 奇偶游戏 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 160 难度:6级算法题 收藏 关注 有n个城市,第i个城市有ai个人.Daenery ...
随机推荐
- 如何用PHP遍历文件数目 或删除目录下的全部文件?
先说一下基础知识: 文件位置如下图所示: 1.判断是文件还是目录 var_dump(filetype("./aa/bb/cc.txt")); 输出: string(4) " ...
- Vulkan Tutorial 开发环境搭建之Windows
操作系统:Windows8.1 显卡:Nivida GTX965M 开发工具:Visual Studio 2017 相信很多人在开始学习Vulkan开发的起始阶段都会在开发环境的配置上下一些功夫,那么 ...
- 130行C语言实现个用户态线程库——ezthread
准确的说是除掉头文件,测试代码和非关键的纯算法代码(只有双向环形链表的ADT),核心代码只有130行左右,已经是蝇量级的用户态线程库了.把这个库取名为ezthread,意思是,这太easy了,人人都可 ...
- Add Two Numbers 2015年6月8日
You are given two linked lists representing two non-negative numbers. The digits are stored in rever ...
- List集合数据太多进行分批,List的subList方法应用
List<String> mStrings=new ArrayList<>(); //初始化 for (int i = 0; i < 1020; i++) { mStri ...
- React介绍(讲人话)
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 21.0px "PingFang SC"; color: #616161 } span. ...
- INFORMATION_SCHEMA.PROFILING
24.18 The INFORMATION_SCHEMA PROFILING Table PROFILING表提供了语句分析信息. 其内容对应于SHOW PROFILES和SHOW PROFILE语句 ...
- 高性能队列Disruptor系列1--传统队列的不足
在前一篇文章Java中的阻塞队列(BlockingQueue)中介绍了Java中的阻塞队列.从性能上我们能得出一个结论:数组优于链表,CAS优于锁.那么有没有一种队列,通过数组的方式实现,而且采用无锁 ...
- Vulkan Tutorial 13 Render passes
操作系统:Windows8.1 显卡:Nivida GTX965M 开发工具:Visual Studio 2017 Setup 在我们完成管线的创建工作,我们接下来需要告诉Vulkan渲染时候使用的f ...
- js禁止浏览器的回退事件
直接来个终极方案: 查找了好多资料才找到的,这种方式,可以消除 后退的所有动作.包括 键盘.鼠标手势等产生的后退动作. <script language="javascript&quo ...