题目链接:uva 1557 - Calendar Game

题目大意:给定一个日期,每次能够选择加一个月,或者加一天,加一个月的前提是下一个月有相应的日期,比方1.30加一个月变成2.30是不合法的。日期上限为2001.11.4。两个人轮流操作。不能操作为失败。

解题思路:dp[y][m][d]表示相应日期是否为先手必胜。

预先处理就可以,注意细节,包含闰年等。分享代码。

#include <cstdio>
#include <cstring>
#include <algorithm>using namespace std;
const int Y = 105;
const int D = 15;
const int M = 35;
const int month[D] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};int dp[Y][D][M];bool is_year (int y) {if (y % 100 == 0 && y % 400 == 0)return true;if (y % 4 == 0 && y % 100)return true;return false;
}int get_day (int y, int m) {if (y == 2001 && m == 11)return 4;if (m == 2 && is_year(y))return 29;return month[m];
}bool judge_day (int y, int m, int d) {if (y > 101)return false;if (y == 101 && m > 11)return false;if (y == 101 && m == 11 && d > 4)return false;return true;
}bool getnext_day (int& yy, int& mm, int& dd, int y, int m, int d, int type) {if (type) {dd = d;mm = m + 1;if (mm > 12) {yy = y + 1;mm = 1;} elseyy = y;if (dd > get_day(yy + 1900, m))return false;} else {dd = d + 1;if (dd > get_day(y + 1900, m)) {dd = 1;mm = m + 1;} elsemm = m;if (mm > 12) {yy = y + 1;mm = 1;} elseyy = y;}return judge_day(yy, mm, dd);
}int SG (int y, int m, int d) {if (dp[y][m][d] != -1)return dp[y][m][d];dp[y][m][d] = 0;int yy, mm, dd;if (getnext_day(yy, mm, dd, y, m, d, 0)) {if (SG(yy, mm, dd) == false)dp[y][m][d] = 1;}if (getnext_day(yy, mm, dd, y, m, d, 1)) {if (SG(yy, mm, dd) == false)dp[y][m][d] = 1;}return dp[y][m][d];
}void init () {memset(dp, -1, sizeof(dp));dp[101][11][4] = 0;for (int i = 0; i <= 101; i++) {int limit_month = (i == 101 ?

11 : 12); for (int j = 1; j <= limit_month; j++) { int limit_day = get_day(1900+i, j); for (int d = 1; d <= limit_day; d++) SG(i, j, d); } } } int main () { init(); int cas, y, m, d; scanf("%d", &cas); while (cas--) { scanf("%d%d%d", &y, &m, &d); printf("%s\n", dp[y-1900][m][d] ?

"YES" : "NO"); } return 0; }

uva 1557 - Calendar Game(博弈)相关推荐

  1. HDU - 1079 Calendar Game(博弈打表sg函数)

    题目链接:点击查看 题目大意:给出一个日期,两个人轮流按照规则操作,具体规则如下: 每次可以增加一天 每次可以增加一个月到下一个月的当天 首先到达2001年11月4日的人获胜,问谁能获胜 题目分析:因 ...

  2. LightOJ 1393 Crazy Calendar(博弈)题解

    题意:r*c方格中,每个格子有一定石子,每次移动每格任意数量石子,只能向下或者向右动一格,不能移动为败 思路:显然是Nim,到右下曼哈顿距离为偶数的不用管,因为先手动一下后手动一下最后移到右下后还是先 ...

  3. HDU 1079 Calendar Game (日期博弈,真是日历都快被我走遍了...)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1079 题面: Calendar Game Time Limit: 5000/1000 MS (Java ...

  4. UVa 1609 (博弈) Foul Play

    姑且把它归类为一道博弈吧,毕竟这也是在找必胜方案. 十分有意思的一道题目,设计一种方案让你支持的1队获胜. 题目给出了两个很重要的条件: 1队能打败至少一半的队伍 对于1队不能打败的黑队,一定存在一个 ...

  5. Calendar Game POJ - 1082(关于日历的博弈问题)

    题意: 两个人轮流玩游戏,每个人可以把日期进行转移,转移规则: 1.可以转移到当前日期的下一天. 2可以转移到下个月的这一天.(但是如果下个月没有这一天就不能进行第二种转移) 3.如果A恰好移动到20 ...

  6. 【UVA - 10891 Game of Sum 】【HRBUST - 1622】 Alice and Bob (区间dp,博弈问题)

    题干: 有一个长度为N的整数序列,Alice和Bob轮流取数,Alice先取.每次玩家只能从左端或者右端 取一个或多个数,但不能两端都取.所有数都被取走后游戏结束,然后统计每个人取走的所有数之和, 作 ...

  7. UVA - 1378 A Funny Stone Game(博弈+sg函数)

    题目链接:点击查看 题目大意:给出n堆石子,两人轮流按照规则操作,不能操作的一方即为输 规则:每次将第i堆减少一个石子,将第j堆和第k堆增加一个石子,i,j,k满足(i<j<=k) 若先手 ...

  8. uva 1378 - A Funny Stone Game sg博弈

    题意:David 玩一个石子游戏. 游戏中,有n堆石子,被编号为0..n-1.两名玩家轮流取石子. 每一轮游戏.每名玩家选取3堆石子i,j,k(i<j,j<=k,且至少有一枚石子在第i堆石 ...

  9. HDU 1079 Calendar Game (博弈)

    转载请注明出处,谢谢 http://blog.csdn.net/ACM_cxlove?viewmode=contents           by---cxlove 题目:每次可以后移一个月,或者后移 ...

最新文章

  1. 操作系统学习:启动进入实模式
  2. 编译安装pdo mysql_centos 6.5下编译安装php5.6,pdo_mysql问题。
  3. numpy库中ndarray切片操作的参数意义
  4. MOSS 2010 修改列表的字段名及列的宽度方法
  5. php 在函数里打开链接,JavaScript中打开链接的几种方法介绍
  6. lua pcall 返回值_Redis和Lua整合
  7. Vue + Spring Boot 学习笔记02:引入数据库实现用户登录功能
  8. Linux内核哈希表分析与应用
  9. Jenkins pipeline job 根据参数动态获取触发事件的分支
  10. bcc校验位怎么算的_数据BCC校验码计算工具
  11. idea gui插件_「Java」 - 自写IntelliJ IDEA插件
  12. 亚马逊“不香了”,高管为何频繁离职?
  13. Android性能优化-App启动优化
  14. WPF中如何选择合适的元数据标记?(英文)
  15. Julia : Jupyter notebook 中试玩Julia
  16. 无法创建新虚拟机 无法打开配置文件 拒绝访问
  17. Airdrop式社交:富友,你的airdrop没关
  18. ## Android Studio 开发(四)--蓝牙通信
  19. 【父亲节故事】32岁入门学习编程的父亲给我的启示
  20. YARN中的任务队列调度器-公平调度器(Fair Scheduler)

热门文章

  1. PCL:全程详解 VS2010+PCL配置
  2. Java多线程编程笔记4:Java内存模型
  3. MongoDB日志文件过大
  4. AMD推Radeon HD 7790显卡 性价比突出下月开卖
  5. Sql server 数据库备份、恢复等
  6. DynamipsGUI2.8 交换模块试用(Etherchannel)
  7. CNKI中银屑病、大肠菌群、内毒素LPS(调研手稿三)
  8. Hbase的shell出现wrong number of arguments xxx以及undefined method any?for xxxx
  9. django默认数据库sqlite3改为mysql
  10. Google Cloud Platform试用期变成只有一天