ACM 14670 臉盆大哥的木桶 排序

2021-10-25 07:47:32 字數 1239 閱讀 9833

彩虹島網紅臉盆大哥最驕傲就是自己製作的木桶。一天???拿了?塊木板,其中第?塊木板的高度為ℎ?,他希望臉盆大哥能夠用這些木板製作出精美的木桶。臉盆大哥告訴???製作乙個木桶需要?塊木板,並且所有桶的底面積為?,底面的木板由???提供。???想知道用這些木塊所製作出來的木桶最多能夠盛多少體積的水。

注意,木板不能疊在另乙個木板上,且不需要考慮木桶具體是怎麼由木板組成的,即是說1塊或2塊木板也可以組成木桶,底面積仍為?。

輸入第一行為乙個整數?(2 ≤ ? ≤ 20),表示一共有?組測試資料。

對於每組測試資料:

第一行有三個整數?(2 ≤ ? ≤ 103), ?, ?(1 ≤ ?, ?, ? ≤ 103),分別表示木板的數量、製作乙個木桶所需要的木板數以及木桶的底面積。

第二行有?個整數,其中第?個整數ℎ?(1 ≤ ℎ? ≤ 103)代表第?個木板的高度。

對於每組測試資料輸出乙個整數?,代表用這些木板製作的桶最多能裝體積為?的水。
示例1

2

4 2 5

1 2 3 4

5 2 5

1 4 5 2 3

20

30

對於第一組樣例,第乙個桶由第一塊木板和第二塊木板組成,能夠盛水的體積為5,第二個桶由第三塊木板和第四塊木板組成,能夠盛水的體積為15,所以最終體積為20。

對於第二組樣例,最後會剩下一塊木板無法參與木桶的製作。

貪心+排序:木板高度降序排列,每 k 個一組,這一組的木桶體積由最短的高度決定,最後不足 k 個的捨去;因此遍歷陣列,取模運算記錄第 k 位的高度,累計的高度與底面積相乘就是總的體積。對於每一組資料,讀取木板高度的時間複雜度 o(n),排序的時間複雜度 o(nlogn),遍歷分組的時間複雜度 o(n),總的時間複雜度 o(nlogn);空間複雜度 o(n)

注意每組結束計算後要釋放 vector 的記憶體

#include

#include

#include

using

namespace std;

intmain()

cout << ans * s << endl;

vector<

int>()

.swap

(v);

}return0;

}

acm 精 挑 細 選

時間限制 3000 ms 記憶體限制 65535 kb 難度 1 輸入第一行是乙個整數n n 10 表示測試資料的組數 每組測試資料的第一行 有乙個整數m m 1000 表示倉庫中所有鋼管的數量,之後m行,每行三個整數,分別表示一根鋼管的長度 以公釐為單位 直徑 以公釐為單位 和編碼 乙個9位整數 ...

ACM 精挑細選

時間限制 3000 ms 記憶體限制 65535 kb 難度 1 描述小王是公司的倉庫管理員,一天,他接到了這樣乙個任務 從倉庫中找出一根鋼管。這聽起來不算什麼,但是這根鋼管的要求可真是讓他犯難了,要求如下 1 這根鋼管一定要是倉庫中最長的 2 這根鋼管一定要是最長的鋼管中最細的 3 這根鋼管一定要...

ACM實驗五 ACM程式設計基礎(3)

2.某售貨員要到若干城市去推銷商品,一直各城市之間的路程,他要選定一條從駐地出發,經過每個城市一遍,最後回到住地的路線,使總的路程最短。3.anagrams by stack問題,見anagrams by stack。1.為了對信件保密,需要對信件進行加密,加密方法是每個字母加5,如a寫成f,b寫成...