icpc:problems:最小函数值
problems | |
---|---|
名称 | 最小函数值 |
题目编号 | P2085 |
题目链接 | luogu.com.cn/… |
来源 | Luogu |
算法分类 | 堆, 优先队列 |
难易程度 | 容易 |
最小函数值
想法
每个函数取正整数部分,所以一定保证所有函数的函数值都是单调递增的。所以将函数的第一个值取出加入堆,使用堆找出最小值,最小值所处的函数自变量增加后重新加入堆。
代码实现
#include<iostream> #include<queue> using namespace std; const int N = 10010; int a[N], b[N], c[N]; struct node{ int x, sit; friend bool operator<(const node i, const node j) { int i_val = a[i.sit] * i.x * i.x + b[i.sit] * i.x + c[i.sit]; int j_val = a[j.sit] * j.x * j.x + b[j.sit] * j.x + c[j.sit]; return i_val > j_val; } }; priority_queue<node>qu; int main() { int n, m; cin >> n >> m; for (int i = 1; i <= n; ++i) { cin >> a[i] >> b[i] >> c[i]; qu.push((node){1, i}); } for (int i = 0; i < m; ++i) { node now = qu.top(); qu.pop(); int val = a[now.sit] * now.x * now.x + b[now.sit] * now.x + c[now.sit]; cout << val << ' '; qu.push((node){now.x+1, now.sit}); } return 0; }
/app/www/public/data/pages/icpc/problems/最小函数值.txt · 最后更改: 2023/02/08 11:09 由 温婕莺