【洛谷】P1567 统计天数 题解
原题地址:https://www.luogu.org/problemnew/show/P1567
题目背景
统计天数
题目描述
炎热的夏日,KC 非常的不爽。他宁可忍受北极的寒冷,也不愿忍受厦门的夏天。最近,他开始研究天气的变化。他希望用研究的结果预测未来的天气。
经历千辛万苦,他收集了连续 N(1 ≤ N ≤ 106)的最高气温数据。
现在,他想知道最高气温一直上升的最长连续天数。
输入输出格式
输入格式:
第 1 行:一个整数 N 。(1 ≤ N ≤ 106)
第 2 行:N个空格隔开的整数,表示连续 N 天的最高气温。(0 ≤ 最高气温 ≤109)
输出格式:
1 行:一个整数,表示最高气温一直上升的最长连续天数。
输入输出样例
输入样例#1:
10
1 2 3 2 4 5 6 8 5 9
输出样例#1:
5
说明
时空限制: 1000ms/128MB
思路:
这道题需要用到数组a、数组b分别表示连续 N 天的最高气温、最高气温一直上升的连续天数,用count进行计算最高气温一直上升的连续天数。然后需要比较前后两个数,最后找出数组b中的count最大值max并输出。
注意:
1、数据很大
2、 count赋初值1,因为天数最小为1天
代码如下:
#include <iostream>
#include <cstdio>
using namespace std;
const int N=10000000; //注意数据要大点,不然数据会溢出
int main()
{
int n,count=1,a[N],b[N]; //长度至少为1,故count赋初值为1;数组b[N]用来存放所有count的值
scanf("%d",&n);
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
for(int i=0;i<n;i++)
{
if(a[i+1]>a[i]) //如果后面的数比前面的大,count加1,并存入数组b
{
count++;
b[i]=count;
}
else //如果后面的数比前面的小,则count值为1,并存入数组b
{
count=1;
b[i]=count;
}
}
int max=b[0]; //将数组第一个元素赋给最大值max
for(int i=0;i<n;i++) //寻找最大的count
{
if(max<b[i])
max=b[i];
}
printf("%d\n",max);
return 0;
}