1. 程式人生 > >【洛谷】P1567 統計天數 題解

【洛谷】P1567 統計天數 題解

 

題目背景

統計天數

題目描述

炎熱的夏日,KC非常的不爽。他寧可忍受北極的寒冷,也不願忍受廈門的夏天。最近,他開始研究天氣的變化。他希望用研究的結果預測未來的天氣。

經歷千辛萬苦,他收集了連續N(1<=N<=10^7)天的最高氣溫資料。

現在,他想知道最高氣溫一直上升的最長連續天數。

輸入輸出格式

輸入格式:

 

*1行:一個整數N。1<=N<=10^7

*2行:N個空格隔開的整數,表示連續N天的最高氣溫。0<=最高氣溫<=10^9。

 

輸出格式:

 

*1行:一個整數,表示最高氣溫一直上升的最長連續天數。

 樓主最開始做的時候,考慮的是先把氣溫存到一個一維數組裡,在遍歷一遍,統計出連續最高的天數,或者在輸入的迴圈中統計出連續的天數,存到另一個數組,畢竟這樣做很簡單!!!

BUT 問題來了 天數N是1<=N<=10^7,這樣做的話會很耗時,會TLE

所以,你輸入的一定要用迴圈輸入,這一段的耗時你是無法避免的。所以,可以在輸入的與前一個進行比較,選擇兩個四個變數t,t0,day,ans;

day和ans最初的時候都是1,因為最少的連續天數就是一天。所以如如今天的氣溫t大於前一天的氣溫t0,day++,如果t<t0,將day儲存的ans中,而且在每次存至前都會與ans進行比較,確定連續天數是最大!

 

/#include<bits/stdc++.h>   //萬能標頭檔案

#include<iotream>

#include<cstdio>

#include<cstring>

#include<cstdlib>

#include<algorithm>
using namespace std;
int main()
{
    int a[100010];
    int n,ans,t0,t,day,len;
    while(scanf("%d",&n)!=EOF)
    {
        t0=-1;
        day=0;
        ans=0;
        for(int i=1;i<=n;i++)
        {
            scanf("%d",&t);
            if(t>t0)
            day++;
            else
            {
                if(day>ans)
                ans=day;
                day=1;
            }
            t0=t;
        }
        cout<<ans<<endl; 
    }
    return 0;
}