【洛谷】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;
}