字首和與差分 海底高鐵

2021-10-10 00:10:19 字數 1671 閱讀 6535

大東亞海底隧道連線著廈門、新北、博艾、那霸、鹿兒島等城市,橫穿東海,耗資 1000 億博艾元,歷時 15 年,於公元 2058 年建成。憑藉該隧道,從廈門可以乘坐火車直達台灣、博艾和日本,全程只需要 4 個小時。

該鐵路經過 n 個城市,每個城市都有乙個站。不過,由於各個城市之間不能協調好,於是乘車每經過兩個相鄰的城市之間(方向不限),必須單獨購買這一小段的車票。第i段鐵路連線了城市i和城市 i+1(1 <= i < n)。如果搭乘的比較遠,需要購買多張車票。第 i 段鐵路購買紙質單程票需要 ai 博艾元。

雖然一些事情沒有協調好,各段鐵路公司也為了方便乘客,推出了 ic 卡。對於第 i 段鐵路,需要花 ci 博艾元的工本費購買一張 ic 卡,然後乘坐這段鐵路一次就只要扣 bi(bi < ai)元。ic 卡可以提前購買,有錢就可以從網上買得到,而不需要親自去對應的城市購買。工本費不能退,也不能購買車票。每張卡都可以充值任意數額。對於第 i 段鐵路的 ic 卡,無法乘坐別的鐵路的車。

uim 現在需要出差,要去 m 個城市,從城市 p1 出發分別按照 p1,p2,p3…pm 的順序訪問各個城市,可能會多次訪問乙個城市,且相鄰訪問的城市位置不一定相鄰,而且不會是同乙個城市。

現在他希望知道,出差結束後,至少會花掉多少的錢,包括購買紙質車票、買卡和充值的總費用。

第一行兩個整數,n,m。

接下來一行,m個數字,表示pi

接下來 n - 1 行,表示第i段鐵路的 ai,bi,ci

乙個整數,表示最少花費

輸入樣例

9 10

3 1 4 1 5 9 2 6 5 3

200 100 50

300 299 100

500 200 500

345 234 123

100 50 100

600 100 1

450 400 80

2 1 10

輸出樣例2 到 3 以及 8 到 9 買票,其餘買卡。

對於 30% 資料 m = 2

對於另外 30% 資料 n <= 1000 ,m <= 1000

對於100%的資料 m,n <= 100000,ai,bi,ci <= 100000

可以先用字首和與差分求出每一段需要經過的次數,然後再用貪心策略在兩種買票方式上進行選取。

#include

using

namespace std;

long

long n,m,p[

100005

],a[

100005

],b[

100005

],c[

100005

],d[

100005];

intmain()

for(

int i=

1;i<=n-

1;i++

)memset

(d,0

,sizeof

(d))

;for

(int i=

1;i)else

}for

(int i=

1;i<=n;i++

)long

long sum=0;

for(

int i=

1;i<=n-

1;i++

) cout

}

海底高鐵(差分)

題目背景 大東亞海底隧道連線著廈門 新北 博艾 那霸 鹿兒島等城市,橫穿東海,耗資1000億博艾元,歷時15年,於公元2058年建成。憑藉該隧道,從廈門可以乘坐火車直達台灣 博艾和日本,全程只需要4個小時。題目描述 該鐵路經過n個城市,每個城市都有乙個站。不過,由於各個城市之間不能協調好,於是乘車每...

P3406 海底高鐵 差分

題目背景 大東亞海底隧道連線著廈門 新北 博艾 那霸 鹿兒島等城市,橫穿東海,耗資1000億博艾元,歷時15年,於公元2058年建成。憑藉該隧道,從廈門可以乘坐火車直達台灣 博艾和日本,全程只需要4個小時。題目描述 該鐵路經過n個城市,每個城市都有乙個站。不過,由於各個城市之間不能協調好,於是乘車每...

洛谷 P3406 海底高鐵 差分

p3406 海底高鐵 基本思路 對於其中一小段,我們要麼全部買紙票,要麼全部刷卡。所以我們只需要統計每一小段經過的總次數。如果你暴力模擬統計的話,估計 一定會tle。接下來來看一組例子 六個數 0 0 0 0 0 0 如果想讓它從第二個到第五個數全部 1,則為 0 1 1 1 1 0 如果這樣模擬 ...