ZOJ1024 Calendar Game

 #include <iostream>

using namespace std;

int year,month,day;
int mon[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
bool f[102][13][32]={false};

//判断是否为闰年
bool judgeLeapYear(int y)
{
if(y%400==0 || (y%100!=0 && y%4==0)){
return true;
}
return false;
}

//下一天
void nextDay(int &y,int &m,int &d)  
{
d++;
if(d>mon[m]){
d=1;
m++;
if(m>12){
m=1;
y++;
}
}
}

//判断是否需要跳转到下一年
bool nextMonth(int &y,int &m,int &d)
{
if(m==12){
m=1;
y++;
return true;
}
if(d<=mon[m+1]){
m++;
return true;
}
else{
return false;
}
}

//判断是否可以获胜
void judge()
{
int i,j,k;
int y,m,d;

for (k = 5; k <= 31; ++k)
f[2001 - 1900][11][k] = true;
    f[2001 - 1900][11][3] = true;
    f[2001 - 1900][11][1] = true;

for(i=2001;i>=1900;i--){
if(judgeLeapYear(i))
mon[2]=29;
else
mon[2]=28;

for(j=12;j>=1;j--){
if(i==2001 && (j==12 || j==11))
continue;

for(k=mon[j];k>=1;k--){
y=i;
m=j;
d=k;
nextDay(y,m,d);
if(!f[y-1900][m][d])
f[i-1900][j][k]=true;
y=i;
m=j;
d=k;
if(nextMonth(y,m,d)){
if(!f[y-1900][m][d])
f[i-1900][j][k]=true;
}
}
}
}
}

int main()
{
int num;
cin>>num;
bool flag;

judge();

while(num--){
cin>>year>>month>>day;

if(f[year-1900][month][day])
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
    return 0;
}
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值