首页 > 代码库 > G - 锘爷考驾照

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);
     

G - 锘爷考驾照