XDU 1028 G.锘爷考驾照
題面:
大家都知道,锘爺是XDUdp第一人,所以锘爺決定要去考駕照!(這很有邏輯吧),他為了一次考到駕照,于是買了一輛越野車從學(xué)校開回家來練習(xí)開車,在途中就會(huì)有很多高山和低谷(低谷可能比地平面低)。經(jīng)過一段時(shí)間的調(diào)查,現(xiàn)在他已經(jīng)知道了最短的路線,我們假設(shè)這是一條直線,并且他一定會(huì)走這條直線。但是這也太遠(yuǎn)了,锘爺想找一段開車的時(shí)間打瞌睡,為了更舒服的打瞌睡,于是锘爺統(tǒng)計(jì)了這條路線上所有的山峰和谷底的高度,他想知道長度為length的路上高度之和最小的一段是多少?
輸入
多組數(shù)據(jù)(不超過50組),處理到文件結(jié)束。
對于每組數(shù)據(jù),讀入一個(gè)整數(shù)n,length(1<=length<=n<=200000)n表示山峰和低谷數(shù),length表示諾爺打瞌睡的長度。
接下來是n個(gè)整數(shù)h(i),表示高度,abs(h(i))<=200000。
輸出
對于每組數(shù)據(jù),輸出一個(gè)整數(shù)表示長度為length高度和的最小值。
樣例輸入
3 2
1 2 3
5 3
1 -1 -1 2 -5
樣例輸出
3
-4
大致思路:
一開始還以為是DP,推著推著感覺不對。然后才發(fā)現(xiàn)有一個(gè)很好理解也很好實(shí)現(xiàn)的方法:
創(chuàng)建一個(gè)數(shù)組,第i個(gè)值是前i-1個(gè)值得和。然后O(n)將數(shù)組掃一遍(從i>=len)開始,取s[i]-s[i-len]的min值就好了。
代碼:
#include<bits/stdc++.h> using namespace std; const int maxn=200010; int s[maxn]; int main() {ios::sync_with_stdio(false);int n,len;while(cin>>n>>len){int minl=1<<30,cnt=1;memset(s,0,sizeof(s));for(int i=1;i<=n;++i){cin>>s[i];s[i]+=s[i-1];}for(int i=len;i<=n;++i){if(s[i]-s[i-len]<minl)minl=s[i]-s[i-len];}//cout<<s[4]<<" "<<s[5]<<endl;cout<<minl<<endl;}return 0; }總結(jié)
以上是生活随笔為你收集整理的XDU 1028 G.锘爷考驾照的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 软考中级,软件设计师考试那些内容,考试大
- 下一篇: hscan扫描工具