G - 锘爷考驾照
2017-07-17 11:56:06
- writer:pprp
-
题目描述大家都知道,锘爷是XDUdp第一人,所以锘爷决定要去考驾照!(这很有逻辑吧),他为了一次考到驾照,于是买了一辆越野车从学校开回家来练习开车,在途中就会有很多高山和低谷(低谷可能比地平面低)。经过一段时间的调查,现在他已经知道了最短的路线,我们假设这是一条直线,并且他一定会走这条直线。但是这也太远了,锘爷想找一段开车的时间打瞌睡,为了更舒服的打瞌睡,于是锘爷统计了这条路线上所有的山峰和谷底的高度,他想知道长度为length的路上高度之和最小的一段是多少?输入多组数据(不超过50组),处理到文件结束。对于每组数据,读入一个整数n,length(1<=length<=n<=200000)n表示山峰和低谷数,length表示诺爷打瞌睡的长度。接下来是n个整数h(i),表示高度,abs(h(i))<=200000。输出对于每组数据,输出一个整数表示长度为length高度和的最小值。样例输入3 2 1 2 3 5 3 1 -1 -1 2 -5样例输出3 -4
-
代码如下:
-
#include <iostream> #include <cstdio> #include <algorithm> using namespace std; int main() { int MIN; int n, length; while(~scanf("%d%d",&n,&length)) { int sum = 0; int * record = new int[n-length+1]; int * num = new int[n]; for(int i= 0 ; i <n ; i ++) { scanf("%d",&num[i]); } for(int i = 0 ; i < length ; i++) sum +=num[i]; MIN = sum; for(int head = 0,tail = length;tail < n; head++,tail++) { sum -= num[head]; sum += num[tail]; if(sum < MIN) MIN = sum; } cout <<MIN <<endl; delete num; delete record; } return 0; }
错误原因:
-
new用法掌握不牢;int * num = new int[n];不是int * num = new int (n);
代码改变世界