zoj 1024

#include <iostream>  
#include <fstream>
using namespace std;  

int main()  
{  
 ifstream cin("1.txt");
 int t;  
 int year;  
 int month;  
 int day;  
 cin>>t;  

 for(int i=0; i<t; i++)  
 {  
  cin>>year>>month>>day;   

  if(month == 9 && day == 30)  
  {  
   cout<<"YES"<<endl;  
   continue;  
  }  

  if(month == 11 && day == 30)  
  {  
   cout<<"YES"<<endl;  
   continue;  
  }  

  if((month + day)%2 == 0)  
   cout<<"YES"<<endl;  
  else 
   cout<<"NO"<<endl;  
 }  

 return 1;  

我的错误答案,题目理解错误

#include <vector>
#include <algorithm>
#include <iostream>
#include <fstream>
using namespace std;
class calendar
{
public:
 int year;
 int month;
 int day;
 calendar() {}
 calendar(const calendar & c):year(c.year),month(c.month),day(c.day) {}
 calendar(int year,int month,int day):year(year),month(month),day(day) {}
 void setzero(int year,int month,int day){this->year=year;this->month=month;this->day=day;}
 bool iszero() {return (!year&&!month&&!day);}
 bool operator==(const calendar& c)
 {
  if(year==c.year && month==c.month && day==c.day)
   return true;
  return false;
 }
 bool operator<=(const calendar& c)
 {
  if(year>c.year)
   return false;
  else if(year<c.year)
   return true;
  else
  {
   if(month>c.month)
    return false;
   else if(month<c.month)
    return true;
   else
   {
    return day<=c.day;
   }
  }
 }
};
bool leap(int year)
{
 if(year%100==0)//
 {
  if(year%400==0)
   return true;
  else 
   return false;
 }
 else//不能%100为0
 {
  if(year%4==0)
   return true;
  else
   return false;
 }
}
calendar get_next_day(calendar c)
{
 calendar next_day(c);
 
  switch (next_day.month)
  {
  case 1:
  case 3:
  case 5:
  case 7:
  case 8:
  case 10:
   if(next_day.day==31)
   {
    next_day.month++;
    next_day.day=1;
   }
   else
   {
    next_day.day++;
   }
   break;
  case 4:
  case 6:
  case 9:
  case 11:
   if(next_day.day==30)
   {
    next_day.month++;
    next_day.day=1;
   }
   else
   {
    next_day.day++;
   }
   break;
  case 2:
   if(next_day.day==29)
   {
    next_day.month++;
    next_day.day=1;
   }
   else if(next_day.day==28)
   {
    if(leap(next_day.year))//leap year
    {
     next_day.day++;
    }
    else
    {
     next_day.month++;
     next_day.day=1;
    }
   }
   else
   {
    next_day.day++;
   }
   break;
  case 12:
   {
    if(31==next_day.day)
    {
     next_day.year++;
     next_day.month=1;
     next_day.day=1;
    }
    else
     next_day.day++;
   }
   break;
  }
  return next_day;
}
calendar get_next_month(calendar c)
{
 calendar next_month(c);
 switch (next_month.month)
 {
 case 1:
  if(30==next_month.day || 31==next_month.day)
  {
   next_month.setzero(0,0,0);
  }
  else if(29==next_month.day)
  {
   if (leap(next_month.year))// leap year
   {
    next_month.month++;
   }
   else// not leap year
   {
    next_month.setzero(0,0,0);
   }
  }
  else
  {
   next_month.month++;
  }
  break;
 case 3:
 case 5:
 case 7:
 case 8:
 case 10:
  if(next_month.day==31)
  {
   next_month.setzero(0,0,0);
  }
  else
  {
   next_month.month++;
  }
  break;
 case 2:
 case 4:
 case 6:
 case 9:
 case 11:
  next_month.month++;
  break;
 case 12:
  {
   next_month.year++;
   next_month.month=1;
  }
  break;
 }

 return next_month;
}

calendar c_begin(1900,1,1);
calendar c_end(2001,11,4);
bool win;
bool flag;

void dfs(calendar c, bool win)
{
 if(flag==true)
  return;

 if(c==c_end && win)
  flag=true;
 
 calendar next_month=get_next_month(c);
 if(!(next_month.iszero()) && next_month<=c_end)
  dfs(next_month, !win);

 calendar next_day=get_next_day(c);
 if(next_day<=c_end)
  dfs(next_day, !win);
}
int main()
{
#ifdef ONLINE_JUDGE
#else
 ifstream cin("1.txt");
#endif
 int T;
 cin>>T;
 calendar c;
 
 while(T--)
 {
  cin>>c.year>>c.month>>c.day;
  win=false; 
  flag=false;
  dfs(c,win);
  if(flag)
   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、付费专栏及课程。

余额充值