标签:
2
3 8
12 2
63266
解题思路:今天是难忘的一天,体会到了一句话,不到最后关头绝不能放弃!最后一分钟AC通过!
落掉一种情况,就是两个相邻的日期是在一个月内的时候,我的算法会计算错误。
感觉自己想出来的方法经常是相当冗余且容易出错,还是自己功力不够啊。
选取算法的时候应选取简单地不容易出错的才行。
能一块讨论就没必要分情况讨论,要注意合并相同的一些情况。
代码:
#include <iostream> #include <cstdio> #include <algorithm> using namespace std; typedef struct node{ int month; int day; }; node a[370]; int cmp(node a,node b){ return (a.month<b.month) || (a.month==b.month&&a.day<b.day); } int main() { int n; int maxx=0; int daycount[370]={0}; int monthday[13]={0,31,29,31,30,31,30,31,31,30,31,30,31}; scanf("%d",&n); if(n==0){ printf("86400\n"); return 0; } if(n==366){ printf("0\n"); return 0; } for(int i=0;i<n;i++){ scanf("%d %d",&a[i].month,&a[i].day); } sort(a,a+n,cmp); for(int i=0;i<n+1;i++){ if(i==0){ for(int j=1;j<a[i].month;j++){ daycount[i]+=monthday[j]; } daycount[i]+=a[i].day-1; } if(i==n){ for(int j=a[i-1].month+1;j<=12;j++){ daycount[i]+=monthday[j]; } daycount[i]+=(monthday[a[i-1].month]-a[i-1].day); } if(i!=0&&i!=n&&a[i].month!=a[i-1].month){ for(int j=a[i-1].month+1;j<a[i].month;j++){ daycount[i]+=monthday[j]; } daycount[i]+=(monthday[a[i-1].month]-a[i-1].day); daycount[i]+=a[i].day-1; } if(i!=0&&i!=n&&a[i].month==a[i-1].month){//这种情况做的时候被落掉! daycount[i]+=a[i].day-a[i-1].day-1; } maxx=max(daycount[i],maxx); } double second=maxx*86400*1.0/366; printf("%.0lf\n",maxx*86400*1.0/366); return 0; }
标签:
原文地址:http://www.cnblogs.com/TWS-YIFEI/p/5747646.html