题意:给n个A、B、C序列,每个序列可以构成Fi(x)=Aix^2+Bix+Ci (x∈N*)函数,求每个序列对应的每个函数值里m个最小值
思路:和序列合并相同,x=1必取,之后堆中每取出一个对应放入递增的x值,保证不重复
#include<bits/stdc++.h>
using namespace std;
int n, m, a[10005][3], p[10005];
int f(int A, int B, int C, int x)
{
return A*x*x+B*x+C;
}
int main()
{
while (cin >> n >> m) {
priority_queue<pair<int, int>, vector<pair<int, int> >, greater<pair<int, int> > > q;
for (int i = 0; i < n; i++)
cin >> a[i][0] >> a[i][1] >> a[i][2];
for (int i = 0; i < n; i++) {
p[i] = 1;
int x = f(a[i][0], a[i][1], a[i][2], 1);
q.push(make_pair(f(a[i][0], a[i][1], a[i][2], 1), i));
}
for (int i = 0; i < m; i++) {
int k = q.top().second;
printf("%d ", q.top().first);
q.pop();
q.push(make_pair(f(a[k][0], a[k][1], a[k][2], ++p[k]), k));
}
}
return 0;
}