LUOGU P1512 伊甸园日历游戏
2024-10-08 01:45:02
题目描述
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: 复制
3
2001 11 3
2001 11 2
2001 10 3
输出样例#1: 复制
YES
NO
NO
说明
建议先把所有情况都算出来^_^
解题思路
记忆化搜索+博弈论。
代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
int f[2005][15][35];
int month[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};
bool vis[2005][15][35];
int T;
inline bool pd(int y,int m,int d){
if(y<2001) return true;
if(y==2001 && m<11) return true;
if(y==2001 && m==11 && d<4) return true;
return false;
}
inline int dfs(int y,int m,int d){
if((y%4!=0 || y==1900) && m==2 && d==29) return 1;
if(d>month[m]) {m++;d=1;}
if(m==13) y++,m=1;
if(vis[y][m][d]) return f[y][m][d];vis[y][m][d]=1;
if(month[m+1]>=d && pd(y,m+1,d)) f[y][m][d]=((dfs(y,m+1,d))^1);
if(pd(y,m,d+1)) f[y][m][d]|=((dfs(y,m,d+1)^1));
return f[y][m][d];
}
int main(){
f[2001][11][3]=f[2001][10][4]=1;
dfs(1900,1,1);
// for(register int i=1900;i<=2001;i++)
// for(register int j=1;j<=12;j++)
// for(register int k=1;k<=31;k++)
// printf("f[%d][%d][%d]=%d\n",i,j,k,f[i][j][k]);
scanf("%d",&T);int x,y,z;
while(T--){
scanf("%d%d%d",&x,&y,&z);
puts(f[x][y][z]?"YES":"NO");
}
return 0;
}
最新文章
- Linux下使用crontab定时备份日志
- Zabbix点滴
- call/apply的第一个参数如果为null。this指向window
- MySQL的SQL_CALC_FOUND_ROWS真的很慢么?
- SSH 5W学习
- Swift 自定义炫酷下拉刷新效果
- Refused to set unsafe header ";Connection";
- System.Globalization.CultureInfo.InvariantCulture 解决不同地域字符串格式不同问题
- 使用sklearn进行数据挖掘-房价预测(5)—训练模型
- 基于Mysql数据库的SSM分页查询
- jsonpath 使用教程(快速处理dict的深度查询)
- 【原创】大叔经验分享(24)hive metastore的几种部署方式
- lightoj 1282 取对数的操作
- sha0dow0socks
- 10.纯 CSS 创作一个同心圆弧旋转 loader 特效
- 20155338 2016-2017-2 《Java程序设计》第6周学习总结
- svn: E155015: 提交失败(细节如下) 解决办法
- Codeforces 6D Lizards and Basements 2 dfs+暴力
- HDU4787_GRE Words Revenge
- keycloak 了解
热门文章
- Docker系列(十六):搭建Openshift环境
- hdu 1754 I Hate It (线段树)
- Mybatis-SqlSessionFactoryBuilder,SessionFactory与SqlSession的并发控制
- charles-过滤网络请求方法
- badboy的录制和jmeter的使用
- Redis List类型学习
- EnumProcess 实现枚举进程
- leetcode 1071 Greatest Common Divisor of Strings
- BZOJ 1874: [BeiJing2009 WinterCamp]取石子游戏
- redis-cli启动问题