# 題目: UVa 11136 - Hoax or what
# 題目說明
Mal-Wart 超市正在進行促銷,以下是說明
- 客戶需將寫有電話的帳單存入抽獎箱
- 每天結束時會選擇最貴及最便宜的帳單各一張,買最貴的人得到最貴與最便宜的差額
- 抽獎完的帳單不會放回抽獎箱
INPUT:
每筆資料第一行為一個整數 n
,代表有 n
天
接下來會有 n
行,每行會有一個整數 k
,代表帳單的數量,接下來 k
個整數代表每個帳單的金額
當 n
為 0
時結束程式
OUTPUT:
輸出超市總共要為這個促銷支出多少錢
# 解題方法
利用 multiset
自動排序,每次取頭與尾的帳單即為最大與最小,相減後累加至結果
由於測資的大小,結果需用 long long
存
# 參考程式碼
#include <iostream> | |
#include <set> | |
using namespace std; | |
int main() | |
{ | |
ios_base::sync_with_stdio(false); | |
cin.tie(nullptr); | |
cout.tie(nullptr); | |
int n, k, temp; | |
unsigned long long total; | |
multiset<int> bill; | |
while (cin >> n && n) { | |
total = 0; | |
bill.clear(); | |
while (n--) { | |
cin >> k; | |
for (size_t i = 0; i < k; i++) cin >> temp, bill.emplace(temp); | |
total += *bill.rbegin() - *bill.begin(); | |
bill.erase(bill.begin()); | |
auto it = bill.end(); | |
bill.erase(--it); | |
} | |
cout << total << "\n"; | |
} | |
return 0; | |
} |
# 參考資料
https://www.larrysprognotes.com/UVa%20-%2011136/