yxy和志願者小姐姐番外篇之大寶寶123追番記(補題,淘汰賽)
1264: yxy和志願者小姐姐番外篇之大寶寶123追番記
時間限制: 1 Sec 記憶體限制: 64 MB
提交: 46 解決: 13
[
題目描述
yxy和小姐姐幸福而快樂地生活在一起後,就拋棄了他的隊友——大寶寶123
為了填補心靈上的空虛只能無聊地追番(一個番就是一部動漫)
他的計劃是這個月看完M集動漫,他的手頭的錢都給yxy追妹子了,所以他並沒有多少錢,
故而他並不在乎看的是什麼番劇,只要不重複地看夠M集(1<=M<=100000)就可以了。
AcmliAcmli動漫網有N個番(1<=N<=100000),AcmliAcmli動漫網是一個奇特的網站。
它的特點是:
1.收錄的番很獨特,都是無限連載的,也就是說,只要你有錢,從第1集開始你想看多少集就看多少集。
2.收費方式獨特,每部劇都有三個整數特徵值A,B,C(1<=A<=10000,1<=B<=10000,1<=C<=10000),
你看第X集的費用F為:F = A*X^2 + B*X + C
大寶寶123想知道,他追完M集至少需要多少錢
輸入
只有一組資料
第一行有兩個整數,N與M,分別表示AcmliAcmli網站收錄的動漫的個數和大寶寶123想看的動漫的集數
接下來M行,每行3個整數描述一個番的特徵值A,B,C
輸出
輸出一個整數代表大寶寶123同學追完M集至少需要多少錢
樣例輸入
10 5 73 41 47 82 29 78 46 28 18 6 66 67 98 36 85 50 98 27 64 60 95 27 88 62 34 16 39 84 52 1
樣例輸出
618
一道充分利用優先佇列的題目:算是純模擬吧。
1.將n部劇的第一集存如優先佇列中
2.從優先佇列中彈出花費最小的一集,一直維護最小的每一集的最小花費
3.將最小集數花費加入到總的花費中,再將下一集存入優先佇列中
4.重複2、3操作,直到看完最後一部劇,輸出結果
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<cstring>
#include<string>
using namespace std;
typedef long long LL;
struct Node{
LL a, b, c;
int jishu;
LL val;
friend bool operator < (const Node& A, const Node& B){
return A.val > B.val;
}
};
int n, m;
priority_queue<Node>pq;
int main()
{
scanf("%d%d", &n, &m);
Node node;
for(int i = 0; i < n; i++){
scanf("%lld%lld%lld", &node.a, &node.b, &node.c);
node.val = node.a + node.b + node.c;
node.jishu = 1;
pq.push(node);
}
LL res = 0;
for(int i = 0; i < m; i++){
res += pq.top().val;
node = pq.top();
pq.pop();
node.jishu++;
node.val = node.a*node.jishu*node.jishu + node.b*node.jishu + node.c;
pq.push(node);
}
printf("%lld\n", res);
return 0;
}