伊甸园日历游戏(vijos--1004)

简介: 伊甸园日历游戏(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

3
2001 11 3
2001 11 2
2001 10 3

样例输出1

YES
NO
NO

解题思路:这个题看起来是一个日期的计算的题,其实把情况都计算一遍就会看出来这是一个找规律的博弈题。

即2001.10.4和2001.11.3必胜(此时m+d=偶数)再推上去是11.2,10.3,9.3,都是必败(此时m+d=奇数),以此类推……

从9月30和11月30开始推算的话也是必胜的(这是一个例外)

程序代码:

#include<stdio.h>
int main()
{
  int i,n,m,j,k,x,y,z;
  scanf("%d",&n);
  for(i=1;i<=n;i++)
  {
    scanf("%d%d%d",&x,&y,&z);
    if(y==9&&z==30)
      printf("YES\n");
    else if(y==11&&z==30)
      printf("YES\n");
    else if((y+z)%2==0)
      printf("YES\n");
    else
      printf("NO\n");
  }
  return 0;
} 
相关文章
|
9天前
|
前端开发 C语言 C++
每周一坑--打飞机游戏
每周一坑--打飞机游戏
|
7月前
lunar="false",日历插件不显示农历
lunar="false",日历插件不显示农历
42 1
|
1月前
|
JavaScript 前端开发 容器
js使用表格生成一个日历,点击按钮上查看上个月,点击按钮下,查看下个月,月份,年份
js使用表格生成一个日历,点击按钮上查看上个月,点击按钮下,查看下个月,月份,年份
78 0
|
9月前
|
移动开发 C++
花最少的时间点亮OLED之RT-Thread u8g2之(DIY一个小小天气站+万年历)
花最少的时间点亮OLED之RT-Thread u8g2之(DIY一个小小天气站+万年历)
116 0
|
9月前
|
传感器 开发者
花最少的时间驱动湿温度传感器之RT-Thread sht3x之(DIY一个小小天气站+万年历)
花最少的时间驱动湿温度传感器之RT-Thread sht3x之(DIY一个小小天气站+万年历)
62 0
|
机器学习/深度学习 存储 编解码
第十三周:文件
重点学习按位运算
108 0
|
JavaScript
腾讯体育轮换tab菜单
没什么技术含量,看到了只想用源生的js来实现一下。  运行代码 本文转自懒得安分博客园博客,原文链接:http://www.cnblogs.com/jikey/archive/2013/04/07/3006511.
996 0