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

来源:互联网 发布:java未安装成功 编辑:程序博客网 时间:2024/05/29 18:11

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;  }}


原创粉丝点击