uva 1557 - Calendar Game(博弈)
题目链接: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(博弈)相关推荐
- HDU - 1079 Calendar Game(博弈打表sg函数)
题目链接:点击查看 题目大意:给出一个日期,两个人轮流按照规则操作,具体规则如下: 每次可以增加一天 每次可以增加一个月到下一个月的当天 首先到达2001年11月4日的人获胜,问谁能获胜 题目分析:因 ...
- LightOJ 1393 Crazy Calendar(博弈)题解
题意:r*c方格中,每个格子有一定石子,每次移动每格任意数量石子,只能向下或者向右动一格,不能移动为败 思路:显然是Nim,到右下曼哈顿距离为偶数的不用管,因为先手动一下后手动一下最后移到右下后还是先 ...
- HDU 1079 Calendar Game (日期博弈,真是日历都快被我走遍了...)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1079 题面: Calendar Game Time Limit: 5000/1000 MS (Java ...
- UVa 1609 (博弈) Foul Play
姑且把它归类为一道博弈吧,毕竟这也是在找必胜方案. 十分有意思的一道题目,设计一种方案让你支持的1队获胜. 题目给出了两个很重要的条件: 1队能打败至少一半的队伍 对于1队不能打败的黑队,一定存在一个 ...
- Calendar Game POJ - 1082(关于日历的博弈问题)
题意: 两个人轮流玩游戏,每个人可以把日期进行转移,转移规则: 1.可以转移到当前日期的下一天. 2可以转移到下个月的这一天.(但是如果下个月没有这一天就不能进行第二种转移) 3.如果A恰好移动到20 ...
- 【UVA - 10891 Game of Sum 】【HRBUST - 1622】 Alice and Bob (区间dp,博弈问题)
题干: 有一个长度为N的整数序列,Alice和Bob轮流取数,Alice先取.每次玩家只能从左端或者右端 取一个或多个数,但不能两端都取.所有数都被取走后游戏结束,然后统计每个人取走的所有数之和, 作 ...
- UVA - 1378 A Funny Stone Game(博弈+sg函数)
题目链接:点击查看 题目大意:给出n堆石子,两人轮流按照规则操作,不能操作的一方即为输 规则:每次将第i堆减少一个石子,将第j堆和第k堆增加一个石子,i,j,k满足(i<j<=k) 若先手 ...
- uva 1378 - A Funny Stone Game sg博弈
题意:David 玩一个石子游戏. 游戏中,有n堆石子,被编号为0..n-1.两名玩家轮流取石子. 每一轮游戏.每名玩家选取3堆石子i,j,k(i<j,j<=k,且至少有一枚石子在第i堆石 ...
- HDU 1079 Calendar Game (博弈)
转载请注明出处,谢谢 http://blog.csdn.net/ACM_cxlove?viewmode=contents by---cxlove 题目:每次可以后移一个月,或者后移 ...
最新文章
- 操作系统学习:启动进入实模式
- 编译安装pdo mysql_centos 6.5下编译安装php5.6,pdo_mysql问题。
- numpy库中ndarray切片操作的参数意义
- MOSS 2010 修改列表的字段名及列的宽度方法
- php 在函数里打开链接,JavaScript中打开链接的几种方法介绍
- lua pcall 返回值_Redis和Lua整合
- Vue + Spring Boot 学习笔记02:引入数据库实现用户登录功能
- Linux内核哈希表分析与应用
- Jenkins pipeline job 根据参数动态获取触发事件的分支
- bcc校验位怎么算的_数据BCC校验码计算工具
- idea gui插件_「Java」 - 自写IntelliJ IDEA插件
- 亚马逊“不香了”,高管为何频繁离职?
- Android性能优化-App启动优化
- WPF中如何选择合适的元数据标记?(英文)
- Julia : Jupyter notebook 中试玩Julia
- 无法创建新虚拟机 无法打开配置文件 拒绝访问
- Airdrop式社交:富友,你的airdrop没关
- ## Android Studio 开发(四)--蓝牙通信
- 【父亲节故事】32岁入门学习编程的父亲给我的启示
- YARN中的任务队列调度器-公平调度器(Fair Scheduler)
热门文章
- PCL:全程详解 VS2010+PCL配置
- Java多线程编程笔记4:Java内存模型
- MongoDB日志文件过大
- AMD推Radeon HD 7790显卡 性价比突出下月开卖
- Sql server 数据库备份、恢复等
- DynamipsGUI2.8 交换模块试用(Etherchannel)
- CNKI中银屑病、大肠菌群、内毒素LPS(调研手稿三)
- Hbase的shell出现wrong number of arguments xxx以及undefined method any?for xxxx
- django默认数据库sqlite3改为mysql
- Google Cloud Platform试用期变成只有一天