a592: 區間操作次數
Tags : 差分 貪心
Accepted rate : 12人/17人 ( 71% ) [非即時]
評分方式:
Tolerant

最近更新 : 2022-06-03 13:53

Content

小明有 n 杯水,第 i 杯水一開始為 vi 毫升。他的目標是令到每一杯內都恰好有 k 毫升。

為達成這月標,小明有一部神奇的機器,可以讓他在一次操作中選擇若干個連續的水杯,並把這些水杯同時加上或減去 1 毫升。顯然,小明總可以用有限步操作令所有杯都為 k 毫升。請協助小明找出他最小需要操作的次數。

例如,當數列 v 是 (5, 5, 5) 時,小明可以直接選所有杯操作五次得到 (0, 0, 0)。當 v 是 (2, 2, 5, 3, 3) 、目標是 1 時,可以先選所有數操作一次得 (1, 1, 4, 2, 2),選 (4, 2, 2) 操作一次就有 (1, 1, 3, 1, 1),再選 (3) 做兩次就可有 (1, 1, 1, 1, 1),故共需 4步。又譬如 v 是 (12, 11, 10, 9)、目標是 10 時,可以先選 (9) 操作一次得到 (12, 11, 10, 10),選 (12, 11) 一次得到 (11, 10, 10, 10),再選 (11) 一次就有 (10, 10, 10, 10),共使用了 3 步。

(温馨提示:系統能根據完成程度給予部分分數,但若要完全解決這題需要能處理 n, k, vi 較大的情況。)

Input

第一行有一正整數 T (1 <= T <= 100),表示接下來有 T 組獨立的測資。(需要應答 T 次)

每個測資中共兩行。第一行給定兩個整數代表一組 n k,第二行則給 n 個整數(以空格隔開),依次表示數列 v 中每個 vi

1 <= n <= 105, 0 <= vi <= 109, 0 <= k <= 109

Output

共輸出 T 行,分別為 T 個測資的答案。對第 i 個測資輸出小明最小需要操作的次數。

Sample Input #1
4
3 0
5 5 5
5 1
2 2 5 3 3
4 10
12 11 10 9
1 2
2
Sample Output #1
5
4
3
0
Sample Input #2
5
3 4
5 6 5
5 8
9 7 9 7 9
5 6
10 2 8 6 9
7 4
9 6 8 0 6 6 4
8 12
10 8 4 2 2 4 8 10
Sample Output #2
2
5
13
13
10
測資資訊:
記憶體限制: 128 MB
不公開 測資點#0 (11%): 1.0s , <1K
不公開 測資點#1 (11%): 1.0s , <1M
不公開 測資點#2 (11%): 1.0s , <1M
不公開 測資點#3 (11%): 1.0s , <1M
不公開 測資點#4 (11%): 1.0s , <1M
不公開 測資點#5 (11%): 1.0s , <10M
不公開 測資點#6 (11%): 1.0s , <10M
不公開 測資點#7 (11%): 1.5s , <10M
不公開 測資點#8 (12%): 1.5s , <10M
Hint :

範例輸入#1 可見題目描述的例子。以上例子均可證明給出的步數是最小值。

!!! 用 random 猜答案是絕對無分的~

Tags:
差分 貪心
出處:
[管理者:
0863450-5@g.... (葉俊濠-2023Leave)
]


ID User Problem Subject Hit Post Date
1013
asnewchien@g... (david chien)
a592
心得分享
111 2023-05-21 21:14