zufeoj_1220: Adam's Games 1

题目链接:http://acm.ocrosoft.com/problem.php?id=1220


题目描述

      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”表示亚当是否有必胜策略。 

样例输入

3
2001 11 3
2001 11 2
2001 10 3

样例输出

YES
NO
NO

提示

    建议先把所有情况都算出来^_^

 
  
题意:
每步有两种方案:天数+1或月份+1。先到达目标日期者为赢。如果到达2001.11.4之后的人就输了。规律是不看年份,每次操作必定会使日期和月份的和的奇偶性发生变化 。目标11.4(11+4=15)是奇数。 天数或月份+1都会导致其和的奇偶性发生改变。
除了9.30和11.30两天,注意两个特殊的日期 。9月30日(日+1为10.1,月+1为10.30)和11月30日(日+1为12.1,月+1为12.30),奇偶性可能是保持不变的,但是因为足够聪明,所以,是可以通过加月份来避开这一天的,
所以因为目标是奇数,所以加入一开始是偶数或者是这两天则先者赢,否则后者赢。

#include<bits/stdc++.h>
using namespace std;
int main(){
	int T;
	int y,m,d;
	cin>>T;
	while(T--){
		cin>>y>>m>>d;
		if((m==9&&d==30)||(m==11&&d==30)||(m+d)%2==0){
			cout<<"YES"<<endl;
		}else{
			cout<<"NO"<<endl;
		}
	}
	return 0;
} 

猜你喜欢

转载自blog.csdn.net/m0_37345402/article/details/80971267