HDU 1079 简单博弈
判断下一步能否到达必胜态,如果可以当前状态就是必败态,否则当前状态记为必胜态
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
bool p[][][];
int month[] = { , , , , , , , , , , , , }; struct Date{
int y , m , d;
Date(int y= , int m= , int d=):y(y),m(m),d(d){}
}; bool run(int y)
{
return y% == || (y% == && y% != );
} bool ok(int y , int m , int d)
{
if(run(y)) month[]=;
bool flag;
if(d > month[m]) flag = false;
else flag = true;
month[] = ;
return flag;
} Date getLastDay(int y , int m , int d)
{
Date tmp;
tmp.y = y , tmp.m = m , tmp.d =d;
if(run(y)) month[]=;
if(d == ){
if(m == ){
tmp.y--;
tmp.d= , tmp.m =;
}else{
tmp.m--;
tmp.d = month[tmp.m];
}
}
else tmp.d--;
month[] = ;
return tmp;
} Date get_next_month(int y , int m , int d)
{
Date tmp;
tmp.y = y , tmp.m = m , tmp.d =d;
if(m == ) tmp.m= , tmp.y+=;
else tmp.m+=;
return tmp;
} void init()
{
memset(p , , sizeof(p));
p[][][] = true;
Date cur = Date( , , );
while(){
Date la = getLastDay(cur.y , cur.m , cur.d); Date next_month = get_next_month(la.y , la.m , la.d);
bool p1 = p[cur.y-][cur.m][cur.d];
bool p2 = false; if(ok(next_month.y , next_month.m , next_month.d))
p2 = p[next_month.y-][next_month.m][next_month.d];
if(p1 || p2) p[la.y-][la.m][la.d] = false;
else p[la.y-][la.m][la.d] = true; cur.y = la.y , cur.m = la.m , cur.d = la.d;
if(cur.y == && cur.m == && cur.d == ) break;
}
} int main()
{
// freopen("a.in" , "r" , stdin);
int T;
scanf("%d" , &T);
init(); while(T--)
{
int y , m ,d;
scanf("%d%d%d" , &y , &m , &d); if(p[y-][m][d]) puts("NO");
else puts("YES");
}
return ;
}
HDU 1079 简单博弈的更多相关文章
- HDU 1564 简单博弈 水
n*n棋盘,初始左上角有一个石头,每次放只能在相邻的四个位置之一,不能操作者输. 如果以初始石头编号为1作为后手,那么对于每次先手胜的情况其最后一步的四周的编号必定是奇数,且此时编号为偶数,而对于一个 ...
- hdu 2897简单博弈
#include<stdio.h> int main() { int n,p,q,k; while(scanf("%d%d%d",&n,& ...
- Hdu 1079 Calendar Game
Problem地址:http://acm.hdu.edu.cn/showproblem.php?pid=1079 一道博弈题.刚开始想用判断P点和N点的方法来打表,但无奈不知是哪里出错,总是WA.于是 ...
- ACM: NBUT 1107 盒子游戏 - 简单博弈
NBUT 1107 盒子游戏 Time Limit:1000MS Memory Limit:65535KB 64bit IO Format: Practice Appoint ...
- HDU 4315 阶梯博弈变形
n个棋子,其中第k个是红色的,每个棋子只能往上爬,而且不能越过.重叠其他棋子,谁将红色棋子移到顶部谁赢. 由于只能往上爬,所以很像阶梯博弈.这题有2个限制,棋子不能重叠,有红棋存在 首先不考虑红色棋, ...
- HDU 1079 Calendar Game(简单博弈)
Calendar Game Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tot ...
- hdu 1846 Brave Game 简单博弈
Problem Description 十年前读大学的时候,中国每年都要从国外引进一些电影大片,其中有一部电影就叫<勇敢者的游戏>(英文名称:Zathura),一直到现在,我依然对于电影中 ...
- HDU 1079 Calendar Game(博弈找规律)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1079 题目大意:给你一个日期(包含年月日),这里我表示成year,month,day,两人轮流操作,每 ...
- HDU 4642 Fliping game (2013多校4 1011 简单博弈)
Fliping game Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tota ...
随机推荐
- DFS(深度) hihoCoder挑战赛14 B 赛车
题目传送门 题意:中文题面 分析:放官方题解,就是从1为根节点深搜记录节点的深度,选出最大的深度的点,将该到达该点的节点都vis掉,然后再重新计算没有vis的点的深度,找最大的相加就是答案.放张图好理 ...
- NDK(18)eclipse 使用C++ STL
1.引用库 在Application.mk 中使用 APP_STL := stlport_static 等. APP_ABI := x86 armeabi APP_PLATFORM := androi ...
- 【转】【开源下载】基于TCP网络通信的即时聊天系统(IM系统)(c#源码)
原文链接 强烈关注,学习!
- vijos P1412多人背包 DP的前k优解
https://vijos.org/p/1412 把dp设成,dp[i][v][k]表示在前i项中,拥有v这个背包,的第k大解是什么. 那么dp[i][v][1...k]就是在dp[i - 1][v] ...
- .vimrc文件配置及含意
1. vimrc文件常见语句释义 设定 tab 的位置 :set tabstop=4 输入 tab 时自动将其转化为空格 :set expandtab ...
- URAL1326. Bottle Taps(状压)
1326 用队列优化的 不知道为什么一直WA 传统直白的 状压 写了超时 O((1<<n)*m*n) 之后想了可以把n省去 预处理一下方案 #include <iostream&g ...
- 使用Kotlin,抛弃findViewById
有没有觉得Android的findViewById挺烦人的.使用Kotlin可以让你彻底抛弃这个烦恼 步骤1.在build.gradle(Module:app)中添加如下一句话 这个在老一点版本的An ...
- linux设置ssh连接时间
相信大家经常遇到SSH连接闲置一会就断开需要重新连接的痛苦,为了使SSH连接保持足够长的时间,我们可以使用如下两种设置 1.sshd服务配置: #vi /etc/ssh/sshd_config Cli ...
- 使用Jenkins进行android项目的自动构建(1)
环境搭建 1. 下载JDK,安装,并将JDK的安装目录加入到环境变量JAVA_HOME,将JDK的bin目录加入到环境变量PATH. 2. 下载Android SDK,解压,并将SDK的安装目录加入到 ...
- [SQL]数据分析SQL笔试题
SQL笔试题 1.请简单写出left join和join的用法区别(可举例说明): 2.求出订单表(order表)中每个客户(custid)的最近一次购买日期(要求:按custid降序排列,trans ...