タイトル説明
n個の関数は、それぞれ、ありますが、\(のF_1、F_2、...、F_n \) 。定義された\(F_iと(X)= X ^ 2 + a_iを* * X + B_i C_I(x∈N*)\) 。これら所与\(a_iを、B_i、及びC_I \) (出力を複数繰り返される場合)、M最小のすべての関数値のすべての機能を要求します。
入力形式
入力データ:入力2つの正の整数nとmの最初の行。次の3行の各nは正の整数は、前記i番目の行3の数は、ビットあい、Bi及びCIです。\(<= 10 000 \のバイ<= 100、CIのあい<= 10) 。
出力フォーマット
出力データ:生成することができるすべてのn個の機能を選別した後、これらの出力関数値の前にm個の要素。これは、スペースで区切られた行の数mに出力すべきです。
思考
ヒープはソート、慎重に追加するgreater<int>
参照、この記事を
コード
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
priority_queue <ll, vector<ll>, greater<ll> > heap;
int main() {
register ll n,m;
scanf("%lld%lld",&n,&m);
for(register int i = 0;i<n;++i) {
register ll a,b,c;
scanf("%lld%lld%lld",&a,&b,&c);
for(register int j = 1;j<=100;++j) {
heap.push((int)a*j*j+b*j+c);
}
}
while(m--) {
printf("%lld ",heap.top());
heap.pop();
}
return 0;
}