hdoj 1079 Calendar Game

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1079

题解:题目大意,两个人Adam和Eve一块儿玩游戏,游戏规则是从1900年1月1日到2001年11月4日这个时间段内随机选择一天,由Adam开始轮流选择,可以选择后一天,也可以选择下个月的这一天,轮流进行,最后一个选择2001年11月4日的人获得胜利,随机给一个日期,问Adam是否会获胜。

  恩,看到题目确实被吓到了,有点不知道从何下手的感觉,还有闰月的干扰,看见别人的分析才明白这个问题实质很简单,可以转化为奇偶问题。

  记 sum = ( m + d ), 其中m为月份, d为日期,对于每次选择,会有以下三种结果:

  1)日期加一,且没有超过本月日期,sum = sum + 1(奇偶性改变)

  2)月份加一,sum = sum + 1(奇偶性改变)

  3)日期加一,超过本月日期,sum = nextm + 1(奇偶性不一定)

  针对第三种情况进行分析,对于每月的最后一天,可以分为如下四类:

  1)奇+1 = 奇  9.30    11.30

  2)奇+1 = 偶  2.29(闰) 6.30    8.31    10.31  12.31

  3)偶+1 = 偶  2.28    4.30

  4)偶+1 = 奇  1.31    3.31    5.31    7.31

  现对题目进行分析,11月4日为奇数,之前选择的人为偶数日期,即偶数为有利局势,奇数为不利局势,有利局势的人必然不会改变自己的有利局势,而处于不利局势的人必然想要逆转不利局势,即如果Eve处于不利局势,他会希望通过自己的选择,使Adam处于不利局势,而这样的局势只有9.30和11.30两天,而处于优势局势的人必然不会使局势变为这两个日期,所以Adam想获胜必然是初始日期为偶数,或者一开始就是9.30或11.30。

  一个游戏最终转化为含有特殊点的奇偶性问题。

 1 #include<stdio.h>
 2 int main(){
 3     int T;
 4     int d, m, y;
 5     scanf("%d",&T);
 6     for(int i = 0; i < T; ++i){
 7         scanf("%d%d%d",&y,&m,&d);
 8         if( (m+d)%2 == 0 || ( ( m == 9 || m == 11) && d == 30 ) )
 9             puts("YES");
10         else
11             puts("NO");
12     }
13 }
时间: 2024-10-26 14:19:00

hdoj 1079 Calendar Game的相关文章

HDU 1079 Calendar Game (博弈论-sg)

Calendar Game Problem Description Adam and Eve enter this year's ACM International Collegiate Programming Contest. Last night, they played the Calendar Game, in celebration of this contest. This game consists of the dates from January 1, 1900 to Nove

poj 1079 Calendar Game(博弈论 SG)

Calendar Game Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 2519    Accepted Submission(s): 1438 Problem Description Adam and Eve enter this year's ACM International Collegiate Programming Co

hdu 1079 Calendar Game sg函数

Calendar Game Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 2766    Accepted Submission(s): 1594 Problem Description Adam and Eve enter this year’s ACM International Collegiate Programming Con

HDU 1079 Calendar Game(博弈找规律)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1079 题目大意:给你一个日期(包含年月日),这里我表示成year,month,day,两人轮流操作,每次操作可以将month+1但是,如果下月没有对应的day则只能对day+1(超过该月日数就进入下月一日),或者就day+1.谁最后到达2001.11.4这个日期就是胜者,问先手的人是否能获胜. 解题思路:这个就用上面的P/N分析,一个个月份日期对应的标记上P或N(很快会发现规律只用找每月特定几天),

HDU 1079 Calendar Game(规律博弈)

题目链接:https://cn.vjudge.net/problem/HDU-1079 题目: Adam and Eve enter this year's ACM International Collegiate Programming Contest. Last night, they played the Calendar Game, in celebration of this contest. This game consists of the dates from January 1

hdu 1079 Calendar Game

题目:输入年月日,可以进行两种操作 1.月份加一 2.日期加一 谁最先到 2001 年11月4 日 获胜 思路:此题为找规律博弈 取决于奇偶性 我们新定义一个数 sum,其中sum 等于 月份加上日期 比如 样例 2001 11 3 则 sum=11+3=14 当sum为偶数时,我们无论进行哪种操作,都必然会变为奇数 当sum为奇数时,除了9月30日和11月30会变成奇数外,其余情况都会变成偶数 那么必胜态为 (d+m)%2==0||(d==9&&m==30)||(d==11&&a

HDOJ Calendar Game 1079【博弈】

Calendar Game Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 3097    Accepted Submission(s): 1809 Problem Description Adam and Eve enter this year's ACM International Collegiate Programming Co

常用工具类(System,Runtime,Date,Calendar,Math)

一.Sy 一个java.lang包中的静态工具类. 三大字段: static PrintStream err "标准"错误输出流. static InputStream in "标准"输入流. static PrintStream out "标准"输出流. 其他常用方法: 描述系统信息: 获取系统属性信息: static Properties getProperties(): (Properties是Hashtable的子类,也就是Map 的子类

【HDOJ】4328 Cut the cake

将原问题转化为求完全由1组成的最大子矩阵.挺经典的通过dp将n^3转化为n^2. 1 /* 4328 */ 2 #include <iostream> 3 #include <sstream> 4 #include <string> 5 #include <map> 6 #include <queue> 7 #include <set> 8 #include <stack> 9 #include <vector>