到天宫做客
题目描述
有一天,我做了个梦,梦见我很荣幸的接到了猪八戒的邀请,到天宫陪他吃酒。我犹豫了。天上一日,人间一年啊!当然,我是个闲人,一年之中也没有多少时日是必须在人间的,因此,我希望选一个最长的空闲时间段,使我在天上待的时间尽量长。记住,今年是 40004000 年。天上一天也是 2424 小时,每小时 6060 分,每分 6060 秒。
输入格式
第一行是一个非负整数N,表示 40004000 年中必须呆在人间的天数。
以下共N 行,每行两个用空格隔开的正整数,即日期(月,日),输入文件保证无错误,日期无重复。
输出格式
一个非负整数,即在天上的时间(四舍五入精确到 11 秒)。
样例输入
2 3 8 12 2
样例输出
63266
参考代码
#include <iostream>
#include <cstdio>
#include <iomanip>
#include <algorithm>
using namespace std;
int ti[13]; //储存1~12月的天数
int a[4005];
void monf() //赋值ti数组
{
ti[0] = 0;
ti[1] = 0;
ti[2] = 31;
ti[3] = 60;
ti[4] = 91;
ti[5] = 121;
ti[6] = 152;
ti[7] = 182;
ti[8] = 213;
ti[9] = 244;
ti[10] = 274;
ti[11] = 305;
ti[12] = 335;
}
int main()
{
monf(); //给ti赋值
int i, n, month, day, ans = 0;
double t = 0.0;
scanf("%d", &n);
for(i = 1; i <= n; i++)
{
scanf("%d%d", &month, &day);
a[i] += ti[month]; //这个月(month)的天数加上天数(day)
a[i] += day;
}
sort(a + 1, a + n + 1);
a[n + 1] = 367; //当一年的末尾,n为0时,a = 0 ~ 367
for(i = 1; i <= n + 1; i++)
ans = max(a[i] - a[i-1] - 1, ans); //计算最多待在天上的时间
t = ans * 24 * 60 * 60 * 1.0 / 366; //计算并转化为秒数
cout<<fixed<<setprecision(0)<<t; //四舍五入但并不保留小数点输出
return 0;
}