原题在这:到天宫做客 - 洛谷
题目描述
有一天,我做了个梦,梦见我很荣幸的接到了猪八戒的邀请,到天宫陪他吃酒。我犹豫了。天上一日,人间一年啊!当然,我是个闲人,一年之中也没有多少时日是必须在人间的,因此,我希望选一个最长的空闲时间段,使我在天上待的时间尽量长。记住,今年是4000年。天上一天也是24小时,每小时60分,每分60秒。
输入格式
第一行是一个非负整数 N,表示4000年中必须呆在人间的天数。
以下共N行,每行两个用空格隔开的正整数,即日期(月,日),输入文件保证无错误,日期无重复。
输出格式
一个非负整数,即在天上的时间(四舍五入精确到11秒)。
输入输出样例
输入 #1复制
2
3 8
12 2
输出 #1复制
63266
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,i,ans=0;
int a,b;
float m;
int month[]={0,31,60,91,121,152,182,213,244,274,305,335,366};
int count[9999]={0};
cin>>n;
for(i=0;i<n;i++){
cin>>a>>b;
count[i]+=month[a-1];
count[i]+=b;
}
sort(count,count+n-1);
for(i=0;i<n+1;i++){
ans=max(count[i+1]-count[i]-1,ans);//这个是什么意思捏
}
m=(ans*1.0*24*3600/366)+0.5;
ans=m;
cout<<ans;
return 0;
}
解释一下这句吧,ans=max(count[i+1]-count[i]-1,ans);//这个是什么意思?
用max函数计算出,count[i+1]-count[i]-1和ans哪个最大,然后将最大的值赋值给ans。为什么这样说?
因为题目中说了我希望选一个最长的空闲时间段,使我在天上待的时间尽量长。所以要找到一个最大的值。
希望对题主有所帮助,望采纳!!
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,i,a,b;
int month[]={0,0,31,60,91,121,152,182,213,244,274,305,335,366};
int count[9999][2];
int day;
int max_day = 0;
cin>>n;
for(i=0;i<n;i++){
cin>>count[i][0]>>count[i][1];
}
//先将日期排序方便求各个日期间隔
for(i=0;i<n;i++){
for(int j=i+1;j<n;j++){
if(count[i][0]>count[j][0] || (count[i][0]==count[j][0] && count[i][1]>count[j][1])){
swap(count[i][0], count[j][0]);
swap(count[i][1], count[j][1]);
}
}
}
//求各个日期之间最大间隔,日期那一天是必须在人间的日期,所以要减掉这一天
max_day = month[count[i][0]] + count[i][1] - 1;
for(i=1;i<n;i++){
day = month[count[i][0]] + count[i][1] - 1 - (month[count[i-1][0]] + count[i-1][1]);
max_day = max(day, max_day);
}
day = 366 - (month[count[i-1][0]] + count[i-1][1]);
max_day = max(day, max_day);
//四舍五入
cout<<(int)(max_day*24*60*60*1.0/366 + 0.5);
return 0;
}