XDU 1028 G.锘爷考驾照
生活随笔
收集整理的這篇文章主要介紹了
XDU 1028 G.锘爷考驾照
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題面:
大家都知道,锘爺是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
大致思路:
一開始還以為是DP,推著推著感覺不對。然后才發現有一個很好理解也很好實現的方法:
創建一個數組,第i個值是前i-1個值得和。然后O(n)將數組掃一遍(從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; }總結
以上是生活随笔為你收集整理的XDU 1028 G.锘爷考驾照的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 软考中级,软件设计师考试那些内容,考试大
- 下一篇: hscan扫描工具