题目描述
有一天,我做了个梦,梦见我很荣幸的接到了猪八戒的邀请,到天宫陪他吃酒。我犹豫了。天上一日,人间一年啊!当然,我是个闲人,一年之中也没有多少时日是必须在人间的,因此,我希望选一个最长的空闲时间段,使我在天上待的时间尽量长。记住,今年是4000年。天上一天也是24小时,每小时60分,每分60秒。
输入输出格式
输入格式:
输入文件的第一行是一个非负整数 N,表示4000年中必须呆在人间的天数,以下共N行,每行两个用空格隔开的正整数,即日期(月,日),输入文件保证无错误,日期无重复。
输出格式:
输出文件仅有一行包含一个非负整数,即在天上的时间(四舍五入精确到秒)。
输入输出样例
输入样例#1: 复制
2
3 8
12 2
输出样例#1: 复制
63266
思路:模拟
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; int n,ans,num[13]; struct nond{ int month,day; }v[366]; int tim(nond a,nond b){ if(a.month==b.month) return b.day-a.day-1; int bns=num[a.month]-a.day; for(int i=a.month+1;i<b.month;i++) bns+=num[i]; bns+=b.day-1; return bns; } int cmp(nond a,nond b){ if(a.month==b.month) return a.day<b.day; return a.month<b.month; } int main(){ scanf("%d",&n); num[1]=num[3]=num[5]=num[7]=num[8]=num[10]=num[12]=31; num[4]=num[6]=num[9]=num[11]=30; num[2]=29; for(int i=1;i<=n;i++) scanf("%d%d",&v[i].month,&v[i].day); v[n+1].month=1;v[n+1].day=0; v[n+2].month=12;v[n+2].day=32; sort(v+1,v+3+n,cmp); for(int i=1;i<=n+1;i++) ans=max(ans,tim(v[i],v[i+1])); ans=ans*24*60*60; if(ans%366<183) printf("%d",ans/366); else printf("%d",ans/366+1); }