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

猜你喜欢

转载自blog.csdn.net/zyc1061422/article/details/84777660