P1178 【到天宫做客】
也是模拟赛的一题qwq……写了六次才过qwq……
有点考语文啊qwq……
梳理一下题目要点:
1.4000年能被400整除,所以是闰年,2月29天,全年366天。
2.天上一日,人间一年。所以人间的一天等于天上的1/366天。
放代码:
#include <bits/stdc++.h>
using namespace std;
int n,i,j,k,s,a[1000001],b[1000001],x[1000001],y[1000001],maxn;
double ans;
struct qwq{
int x;
int y;
}d[1000001];
bool cmp(qwq xx,qwq yy){
if (xx.x==yy.x) return (xx.y<yy.y);
return (xx.x<yy.x);
}
int months(int p){
if (p==1||p==3||p==5||p==7||p==8||p==10||p==12) return 31;
if (p==2) return 29;
if (p==4 ||p==6||p==9||p==11) return 30;
}
int main(){
scanf("%d",&n);
for (i=1;i<=n;i++) scanf("%d%d",&d[i].x,&d[i].y);
sort(d+1,d+n+1,cmp);
for (i=1;i<=n;i++) {
for (j=1;j<=d[i].x-1;j++) b[i]+=months(j);
b[i]+=d[i].y;
}
b[n+1]=367;b[0]=0;
for (i=0;i<=n;i++) a[i]=b[i+1]-b[i]-1;
for (i=0;i<=n;i++) maxn=max(maxn,a[i]);
maxn=maxn*24*60*60;
ans=(maxn*1.0)/366.00+0.5;
cout<<(int)ans<<endl;
return 0;
}
//a[i]表示b[i+1]-b[i]
一些思路和坑点:
对于每一个宴会日期,算出它是那一年的第几天,然后算出每个宴会时间之间的差值。
还要算两头,一头是0,一头是367。
为了方便排序,运用了结构体。