记录编号 |
326923 |
评测结果 |
TTTTTTTTTT |
题目名称 |
零食店 |
最终得分 |
0 |
用户昵称 |
Hzoi_Yniverse |
是否通过 |
未通过 |
代码语言 |
C++ |
运行时间 |
10.035 s |
提交时间 |
2016-10-21 17:31:59 |
内存使用 |
14.23 MiB |
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int f[2022][22][41],vis[2022][22][41];
bool Run(int x){
if(x%4) return 0;
if(x%100==0&&x%400) return 0;
if(x%3200==0) return 0;
return 1;
}
bool Day31(int y){
return (y==1||y==3||y==5||y==7||y==8||y==10||y==12);
}
bool JudgeYear(int y){//跳一个月是否在当年
return y+1<=12;
}
bool JudgeMonth(int x,int y,int z){//跳一天是否在当月
if(y==2) return (Run(x)&&z+1<=29)||(!Run(x)&&z+1<=28);
else return (Day31(y)&&z+1<=31)||(!Day31(x)&&z+1<=30);
}
bool Dp(int x,int y,int z){//1从这一天开始必赢 0从这一天开始必输
if(vis[x][y][z]) return f[x][y][z];
vis[x][y][z]=1;
if(JudgeYear(y)){
if(y+1!=2) f[x][y][z]|=!Dp(x,y+1,z);//下一个月不是二月
else if((z==29&&Run(x))||z<29) f[x][y][z]|=!Dp(x,y+1,z);//下一个月是二月
}
else if(x+1<=2012) f[x][y][z]|=!Dp(x+1,1,z);//下一年
if(JudgeMonth(x,y,z)) f[x][y][z]|=!Dp(x,y,z+1);
else{
if(JudgeYear(y)) f[x][y][z]|=!Dp(x,y+1,1);
else if(x+1<=2012) f[x][y][z]|=!Dp(x+1,1,1);
}
return f[x][y][z];
}
int main(){
//freopen("calendar1.in","r",stdin);
int x,y,z;
vis[2012][12][22]=1; f[2012][12][22]=0;
while(scanf("%d%d%d",&x,&y,&z)!=EOF){
if(Dp(x,y,z)) printf("未开票\n");
else printf("NO\n");
}
while(1);
return 0;
}