描述

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 伊甸园日历游戏 博弈的更多相关文章

  1. vijos 1004 伊甸园日历游戏 博弈+打表找规律

    描述 Adam和Eve玩一个游戏,他们先从1900.1.1到2001.11.4这个日期之间随意抽取一个日期出来.然后他们轮流对这个日期进行操作: 1 : 把日期的天数加1,例如1900.1.1变到19 ...

  2. LUOGU P1512 伊甸园日历游戏

    题目描述 Adam和Eve玩一个游戏,他们先从1900.1.1到2001.11.4这个日期之间随意抽取一个日期出来.然后他们轮流对这个日期进行操作: 1 : 把日期的天数加1,例如1900.1.1变到 ...

  3. 【noip模拟题】日历游戏(博弈论+搜索)

    直接搜索即可... 注意不要爆栈..所以我们可以分块搜索... 然后太懒且太弱我就不写了... orz hzwer http://hzwer.com/4954.html [问题描述] moreD和mo ...

  4. 洛谷P1512伊甸园的日历游戏题解

    题目 因为可能要参加qbxt的数论考试,所以最近要开始猛刷数论题了. 这是第一道,不过看样子并不想数论题啊,只是一个博弈论. 思路 一位著名老师说过,数学就是转化和化简,所以先考虑化简,先考虑化简年份 ...

  5. tyvj P1075 - 硬币游戏 博弈DP

    P1075 - 硬币游戏 From price    Normal (OI)总时限:10s    内存限制:128MB    代码长度限制:64KB 背景 Background 农民John的牛喜欢玩 ...

  6. BZOJ 1411&&Vijos 1544 : [ZJOI2009]硬币游戏【递推,快速幂】

    1411: [ZJOI2009]硬币游戏 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 897  Solved: 394[Submit][Status ...

  7. 计蒜客 取数游戏 博弈+dp

    题目链接 取数游戏 思路:dp(x, y)表示先手在区间[x, y]能取得的最大分数.当先手取完,就轮到后手去,后手一定会选择当前能令他得到最大分数的策略,其实当先手在[x, y]区间两端取走一个数, ...

  8. Nim游戏博弈(收集完全版)

    Nim游戏证明参见: 刘汝佳训练指南P135-写的很酷! 知乎上SimonS关于Nim博弈的回答! Nim游戏的概述: 还记得这个游戏吗? 给出n列珍珠,两人轮流取珍珠,每次在某一列中取至少1颗珍珠, ...

  9. 51 Nod 1430 奇偶游戏(博弈)

    1430 奇偶游戏 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 160 难度:6级算法题 收藏 关注 有n个城市,第i个城市有ai个人.Daenery ...

随机推荐

  1. Centos7.0下将Python更新到Python2.7.13

    在云服务器下默认安装的python版本过低,所有我们要手动进行更新(不建议卸载老的版本,然后安装新的,这样会导致大量的异常错误)   为了防止在安装编译python时出错,需先更新gcc :yum - ...

  2. chrome主页被篡改 成hao123

    应该是开了个从流氓网站下的蓝灯,然后发现主页被篡改 尝试chrome设置修改无效,应该是快捷方式被改了 系统 win10 1.打开对应的下面两个地址,找到chrome的快捷方式,右键属性 C:\Use ...

  3. 【CSS Cookbook】笔记摘要(一)

    概要 CSS的优点:将表现和内容相分离:更好地控制页面布局:大大减少了文件尺寸:缩短了改版时间:提高了易用性. CSS全称层叠式样表(Cascading Style Sheets). 1.问题:如何最 ...

  4. 《Android进阶》之第一篇 在Java中调用C库函数

    在Java代码中通过JNI调用C函数的步骤如下: 第一步:编写Java代码 class HelloJNI{ native void printHello(); native void printStr ...

  5. 通过网络得到html,并解析出其中网址(JAVA程序)

    网络版程序: import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; ...

  6. 基于java:读写一个英文的txt文件,记录单词个数,并输出十个出现最多的单词及出现的个数;

    import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; class W ...

  7. 1.Java 加解密技术系列之 BASE64

    Java 加解密技术系列之 BASE64 序号 背景 正文 总结 序 这段时间,工作中 用到了 Java 的加解密技术,本着学习的态度,打算从这篇文章开始,详细的研究一番 Java 在加解密技术上有什 ...

  8. 调整分区大小(ext2\ext3\ext4)

    现在的时间是2017年5月27日 我想说调整分区大小没那么麻烦,至少我直接将一个ext3格式分区从50G减少到了30G. 步骤如下 1 首先确保那个分区是没被挂载的. 2 调整分区大小,但是其实并没有 ...

  9. 自研框架wap.js实践

    示例 使用分为3个步骤: 1, 配置模板渲染中心,方便别人可以看到你的模板渲染,请求是什么关系,复杂度怎样 2, 配置事件分发中心  方便观察事件分发,事件复杂度 3,写对应的请求方法.渲染方法.   ...

  10. SpringBoot学习helloworld

    这几天开始学习springBoot记录一下(Hello World) pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0 ...