HDU 4515 小Q系列故事——世界上最遥远的距离

HDU 4515

用数组记录时间。

O(n)打表,O(1)查询。


#include<iostream>
#include<iomanip>
using namespace std;
const int MAX=2e5+5;
const int mon[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
const int leap_mon[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};
struct date_{
  int year,month,day;
}date[MAX];
bool judge(int year){
  if((year%4==0&&year%100!=0)||year%400==0)
    return 1;
  return 0;
}
int main(){
  date[MAX/2].year=2013;
  date[MAX/2].month=3;
  date[MAX/2].day=24;
  date[MAX/2+1]=date[MAX/2];
  date[MAX/2-1]=date[MAX/2];
  for(int i=MAX/2+1;i<MAX;i++){
    date[i].day++;
    if(date[i].day>mon[date[i].month]&&!judge(date[i].year))
      date[i].day=1,date[i].month++;
    else if(judge(date[i].year)&&date[i].day>leap_mon[date[i].month])
      date[i].day=1,date[i].month++;
    if(date[i].month>12)
      date[i].month=1,date[i].year++;
    date[i+1]=date[i];
  }
  for(int i=MAX/2-1;i>=0;i--){
    date[i].day--;
    if(date[i].day<1&&!judge(date[i].year)){
        int tp=date[i].month;
        if(tp-1<1)
          tp=13;
        date[i].day=mon[tp-1],date[i].month--;
    }
    else if(date[i].day<1){
        int tp=date[i].month;
        if(tp-1<1)
          tp=13;
        date[i].day=leap_mon[tp-1],date[i].month--;
    }
    if(date[i].month<1)
      date[i].month=12,date[i].year--;
    date[i-1]=date[i];
  }
  int n,ca;
  cin>>ca;
  while(ca--&&cin>>n){
    cout<<date[MAX/2+n].year;
    cout<<"/"<<setw(2)<<setfill('0')<<date[MAX/2+n].month;
    cout<<"/"<<setw(2)<<setfill('0')<<date[MAX/2+n].day<<" ";
    cout<<date[MAX/2-n].year;
    cout<<"/"<<setw(2)<<setfill('0')<<date[MAX/2-n].month;
    cout<<"/"<<setw(2)<<setfill('0')<<date[MAX/2-n].day<<endl;
  }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值