Poj 1082 (博弈)
来源:互联网 发布:excel合并相同数据求和 编辑:程序博客网 时间:2024/05/16 07:48
Calendar Game
Time Limit: 1000MS Memory Limit: 10000KTotal Submissions: 4494 Accepted: 2099
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 November 4, 2001, the contest day. The game starts by randomly choosing a date from this interval. Then, the players, Adam and Eve, make moves in their turn with Adam moving first: Adam, Eve, Adam, Eve, etc. There is only one rule for moves and it is simple: from a current date, a player in his/her turn can move either to the next calendar date or the same day of the next month. When the next month does not have the same day, the player moves only to the next calendar date. For example, from December 19, 1924, you can move either to December 20, 1924, the next calendar date, or January 19, 1925, the same day of the next month. From January 31 2001, however, you can move only to February 1, 2001, because February 31, 2001 is invalid.
A player wins the game when he/she exactly reaches the date of November 4, 2001. If a player moves to a date after November 4, 2001, he/she looses the game.
Write a program that decides whether, given an initial date, Adam, the first mover, has a winning strategy.
For this game, you need to identify leap years, where February has 29 days. In the Gregorian calendar, leap years occur in years exactly divisible by four. So, 1993, 1994, and 1995 are not leap years, while 1992 and 1996 are leap years. Additionally, the years ending with 00 are leap years only if they are divisible by 400. So, 1700, 1800, 1900, 2100, and 2200 are not leap years, while 1600, 2000, and 2400 are leap years.
A player wins the game when he/she exactly reaches the date of November 4, 2001. If a player moves to a date after November 4, 2001, he/she looses the game.
Write a program that decides whether, given an initial date, Adam, the first mover, has a winning strategy.
For this game, you need to identify leap years, where February has 29 days. In the Gregorian calendar, leap years occur in years exactly divisible by four. So, 1993, 1994, and 1995 are not leap years, while 1992 and 1996 are leap years. Additionally, the years ending with 00 are leap years only if they are divisible by 400. So, 1700, 1800, 1900, 2100, and 2200 are not leap years, while 1600, 2000, and 2400 are leap years.
Input
The input consists of T test cases. The number of test cases (T ) is given in the first line of the input file. Each test case is written in a line and corresponds to an initial date. The three integers in a line, YYYY MM DD, represent the date of the DD-th day of MM-th month in the year of YYYY. Remember that initial dates are randomly chosen from the interval between January 1, 1900 and November 4, 2001.
Output
Print exactly one line for each test case. The line should contain the answer "YES" or "NO" to the question of whether Adam has a winning strategy against Eve. Since we have T test cases, your program should output totally T lines of "YES" or "NO".
Sample Input
3 2001 11 3 2001 11 2 2001 10 3
Sample Output
YESNONO
Source
Taejon 2001
把博弈和日历结合在一起的题目,其实没什么,按照题目要求在日历上递推一下状态即可。(ps最后把状态表打出来,可以发现一条非常简单的规律。)
把博弈和日历结合在一起的题目,其实没什么,按照题目要求在日历上递推一下状态即可。(ps最后把状态表打出来,可以发现一条非常简单的规律。)
#include <cstdio>#include<iostream>#include<algorithm>#include<cstring>using namespace std;const int maxn = 2000 + 5;const int M[15] = {0,31,28,31,30,31,30,31,31,30,31,30,31};int tag[maxn][15][35];void pre(){ memset(tag,0,sizeof(tag)); for(int i = 3;i <= 30;i++) tag[2001][11][i] = 1; tag[2001][11][2] = 0; tag[2001][11][1] = 1; tag[2011][10][31] = 0; int d = 30,y = 2001,m = 10; int ny,nm,nd; while(y >= 1900){ int tem1 = 1,tem2 = 1; nd = d + 1; nm = m; ny = y; int c = M[nm]; if(nm == 2 && (ny%4 == 0 && ny != 1900) ) c++; if(nd > c){ nd = 1; nm++; } if(nm > 12){ ny++; nm = 1; } tem1 = tag[ny][nm][nd]; nd = d; nm = m+1; ny = y; if(nm > 12){ ny++; nm = 1; } c = M[nm]; if(nm == 2 && (ny%4 == 0 && ny != 1900) ) c++; if(nd <= c) tem2 = tag[ny][nm][nd]; if(tem1 == 1 && tem2 == 1) tag[y][m][d] = 0; else tag[y][m][d] = 1; d--; if(d <= 0){ m--; if(m <= 0){ y--; m = 12; } d = M[m]; if(m == 2 && (y%4 == 0 && y != 1900) ) d++; } }}int main(){ int t; pre(); scanf("%d",&t); while(t--){ int y,m,d; scanf("%d%d%d",&y,&m,&d); if(tag[y][m][d] == 1) printf("YES\n"); else printf("NO\n"); } return 0;}
- POJ 1082 (博弈)
- Poj 1082 (博弈)
- POJ 1082 Calendar Game (博弈)
- POJ-2505(博弈)
- poj 1076 (博弈)
- [POJ](2975)Nim ---Nim博弈(博弈)
- POJ 1082 博弈推规律
- poj 3840 (nim博弈)
- POJ 2505(博弈乘数)
- poj 1704 (nim博弈)
- POJ 2975 Nim(博弈)
- poj博弈
- 博弈小结(POJ ,HDU,ZOJ博弈问题小结)
- [POJ](1067)取石子游戏 ---威佐夫博弈(博弈)
- poj 1082 Calendar Game——博弈
- poj 1082 Calendar Game 博弈递推
- POJ 1067 取石子游戏 (博弈)
- poj 1704 Georgia and Bob(博弈)
- 对 Linux 新手非常有用的 20 个命令
- 20 Useful Commands for Linux Newbies
- Java多线程——4 阻塞队列
- 安装Win7和Ubuntu12.04双系统后,意外删除Ubuntu12.04引导文件,出现error:unknown filesystem;grub rescue>错误的解决方案
- 2013.8.13 学习笔记《windows核心编程》(十一) 键盘消息与翻译消息
- Poj 1082 (博弈)
- 【职业化思维】
- 20 Advanced Commands for Middle Level Linux Users
- Skin for * cannot be found
- 使用GDB调试Coredump文件
- 图解数据结构(5)——散列法及哈希表
- 20 Advanced Commands for Linux Experts
- gdb调试之堆栈跟踪
- jQuery Animation实现CSS3动画