個人QQ:757394026
團隊QQ:466373640
個人博客:www.doubleq.win
c++/noi/信息學奧數博客:http://www.cnblogs.com/zwfymqz
題目描述
有一天,我做了個夢,夢見我很榮幸的接到了豬八戒的邀請,到天宮陪他吃酒。我猶豫了。天上一日,人間一年啊!當然,我是個閑人,一年之中也沒有多少時日是必須在人間的,因此,我希望選一個最長的空閑時間段,使我在天上待的時間盡量長。記住,今年是4000年。天上一天也是24小時,每小時60分,每分60秒。
輸入
第一行是一個非負整數 N,表示4000年中必須呆在人間的天數,以下共N行,每行兩個用空格隔開的正整數,即日期(月,日),輸入保證無錯誤,日期無重復。
輸出
僅有一行包含一個非負整數,即在天上的時間(四舍五入精確到秒)。
樣例輸入
2
3 8
12 2
樣例輸出
63266
代碼:
#include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<algorithm> #include<cmath> using namespace std; int a[10001]; int month[13]={0,31,29,31,30,31,30,31,31,30,31,30,31}; int main() { int tot; int n; int x,y; scanf("%d",&n); for(int i=1;i<=n;i++) { tot=0; scanf("%d%d",&x,&y);//3 8 12 2 for(int j=1;j<x;j++) { tot=month[j]+tot; } tot=tot+y; a[tot]=1; } double le=0; double l=0; for(int i=1;i<=366;i++) { if(a[i]==1) { le=max(l,le); l=0; } else l++; if(i==366)le=max(l,le); } double ans; ans=double((le)/366)*3600*24; cout<<int(ans+0.5); return 0; }
思路:
這道題有難度,難就難在:
1.本題突破口特殊,需要從測試數據下手,推出一個算法
2要考慮到今年是閏年的情況
3得到算法后如何取最長月份
4最后的四舍五入
廢話不多說,自己看代碼,個人認為我寫的是全網最簡解法
個人博客doubleq.win