博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
伊甸园日历游戏(vijos--1004)
阅读量:3959 次
发布时间:2019-05-24

本文共 876 字,大约阅读时间需要 2 分钟。

题目:

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

32001 11 32001 11 22001 10 3

样例输出1

YESNONO

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

即2001.10.4和2001.11.3必胜(此时m+d=偶数)再推上去是11.2,10.3,9.3,都是必败(此时m+d=奇数),以此类推……
从9月30和11月30开始推算的话也是必胜的(这是一个例外)

程序代码:

#include
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;}

转载地址:http://eexzi.baihongyu.com/

你可能感兴趣的文章
Python SocketAPI
查看>>
众包完成的 Nature 大作:世界上作者最多的文章
查看>>
常用URL标注数据集网络下载
查看>>
adaboostM2初探(记录一个例子)
查看>>
Python使用heapq实现小顶堆(TopK大)、大顶堆(BtmK小)
查看>>
用python的matplotlib包绘制热度图
查看>>
matplot pip安装
查看>>
序列S的所有可能情况
查看>>
在Linux上用pip安装scipy
查看>>
随机salt二次加密及hash加密漫谈
查看>>
linux 技巧:使用 screen 管理你的远程会话
查看>>
同时装了Python3和Python2,怎么用pip?
查看>>
linux tar 解压缩zip文件报错的解决
查看>>
vim,ctag和Taglist
查看>>
Ubuntu的apt命令详解
查看>>
Ubuntu Server 设置sshd
查看>>
sort,uniq命令的使用。
查看>>
linux下md5加密(使用openssl库C实现)
查看>>
openssl、MD5的linux安装方法
查看>>
DevC++ 工程没有调试信息的解决办法
查看>>