字首和與差分 CSGRound2 光騅者的榮耀

2021-10-09 06:32:18 字數 1143 閱讀 1765

小 k 打下的江山一共有 n 個城市,城市ii和城市 i+1有一條雙向高速公路連線,走這條路要耗費時間 ai。

小 k 為了關心人民生活,決定定期進行走訪。他每一次會從 1 號城市到 n 號城市並在經過的城市進行訪問。其中終點必須為城市 n。

不僅如此,他還有乙個傳送器,傳送半徑為 k,也就是可以傳送到 i-k 和 i+k 。如果目標城市編號小於 1 則為 1,大於 n 則為 n。

但是他的傳送器電量不足,只能傳送一次,況且由於一些原因,他想盡量快的完成訪問,於是就想問交通部部長您最快的時間是多少。

注意:他可以不訪問所有的城市,使用傳送器不耗費時間

兩行,第一行 n,k。

第二行 n-1 個整數,第 i 個表示 ai。

乙個整數,表示答案。

輸入樣例 1

4 01 2 3

輸出樣例 1

輸入樣例 2

4 11 2 3

輸出樣例 2樣例解釋 1:

樣例 1,2 的圖示均為以下:

不使用傳送器直接走,答案為66,可以證明這個是最小值。

樣例解釋 2

在 3 處使用,傳送到 4,答案為 3,可以證明這個是最小值。

資料範圍

對於所有資料,ai > 0。

我們只要找到區間長度為 k 的耗費時間之和的最大值,然後將總的耗費時間減去這個最大值即可。

#include

using

namespace std;

long

long n,k,x,f[

1000005];

intmain()

long

long mx;

if(k<=n-1)

else

for(

int i=

1;i<=n-k-

1;i++

) cout<

-mx<

return0;

}

字首和與差分

數列的字首和 sum i 表示a 1 a i 的和 用處1 求i j的和sum j sum i 1 用處2 區間修改。設定乙個change陣列。當區間 i,j 上要加k時,我們令change i k,令change j 1 k。如果我們對change陣列求字首和的話,字首和sum change i ...

字首和與差分

從陣列第乙個開始累加 s i s i 1 a i 求區間 l,r 的和,o 1 複雜度sum s r s l 1 遞推s i j s i j s i 1 j s i j 1 s i 1 j 1 例題 雷射炸彈一種新型的雷射炸彈,可以摧毀乙個邊長為r的正方形內的所有的目標。現在地圖上有n n 1000...

字首和與差分

例題入口 include const int n 320 int a n n a i 1 a i 0 1.對a 求出平方數 將其值置為1 不是平方數就是0 2.對a求乙個字首和 3.對 a,b 求乙個部分和 int sum n n void init for int i 1 i 100000 i i...