CJOJ 2484 函数最小值 / Luogu 2085 函数最小值
来源:互联网 发布:profili软件介绍 编辑:程序博客网 时间:2024/05/21 08:38
CJOJ 2484 函数最小值 / Luogu 2085 函数最小值(STL优先队列,堆)
Description
有n个函数,分别为F1,F2,…,Fn。定义
Input
第一行输入两个正整数n和m,n<=500000, m<=500000
以下n行每行三个正整数,其中第i行的三个数分别为Ai、Bi和Ci。输入数据保证Ai<=10,Bi<=100,Ci<=10000。
Output
输出将这n个函数所有可以生成的函数值排序后的前m个元素。
这m个数应该输出到一行,用空格隔开,并且最后一个数右侧也有一个空格。
Sample Input
3 10
4 5 3
3 4 5
1 7 1
Sample Output
9 12 12 19 25 29 31 44 45 54
Http
CJOJ:http://oj.changjun.com.cn/problem/detail/pid/2484
Luogu:https://www.luogu.org/problem/show?pid=2085
Source
STL优先队列 堆
题目大意
有n个二次函数,均满足
解决思路
想要做出这道题目,首先你要有基础的二次函数知识。
观察题目中的各个值的范围,首先因为a,b,c>0,所以这些二次函数都满足开口向上且对称轴在x轴负半轴。那么我们就可以知道Fi(1)一定是第i个函数的最小值,那么我们把所有的Fi(1)加入一个优先队列(小的优先),每次取出对首元素输出,在把队首元素所对应的的函数的下一个值放入优先队列,循环m次就可以了。(是不是有一点像spfa算法呢?)
代码
#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<algorithm>#include<queue>using namespace std;class Function//存下每一个函数的三个参数的值{public: long long a,b,c;};class Value//优先队列中存取的元素{public: long long data,num,x;//data表示是第num个函数在自变量取x时候的值 即data=Fnum(x)};bool operator < (Value a,Value b)//重载小于号(优先队列中要用),注意是相反的{ return a.data>b.data;}const int maxN=500000;int n,m;priority_queue<Value> Q;Function F[maxN];long long solve(long long num,long long x);//计算Fnum(x)的值int main(){ cin>>n>>m; for (int i=1;i<=n;i++) { cin>>F[i].a>>F[i].b>>F[i].c; Q.push((Value){solve(i,1),i,1});//将初始的每个Fi(1)都放入优先队列 } for (int i=1;i<=m;i++) { Value x=Q.top();//取出队首元素并输出 Q.pop(); cout<<x.data<<' '; Q.push((Value){solve(x.num,x.x+1),x.num,x.x+1});//将队首元素对应的函数的下一个值放入优先队列 } return 0;}long long solve(long long num,long long x){ return F[num].a*x*x+F[num].b*x+F[num].c;}
- CJOJ 2484 函数最小值 / Luogu 2085 函数最小值
- 二次插值法求函数最小值
- 求函数的最小值
- 求函数最小值
- 黄金分割法求函数最小值
- 高度非线性函数的最小值
- 函数求最大值和最小值
- c++ 找最大值 最小值 函数
- 三分求点到二次函数最小值
- st函数--区间最大最小值
- 最小值
- 最小值
- 最小值
- 最小值
- 最小值
- 一个求最大值与最小值的函数
- 一个求最大值与最小值的函数
- 取多个值当中的最大值或最小值函数
- 为什么Java byte类型的取值范围为-128~127
- 【Linux入门】概述
- c++宏
- HMM(Hidden Markov Model)学习
- Java程序执行远程linux命令
- CJOJ 2484 函数最小值 / Luogu 2085 函数最小值
- 利用nginx和docker实现一个简单负载均衡
- 触摸事件的传递过程
- HDU4734 F(x)[数位DP]
- C/C++ 类型转换
- JS本地面向对象Math数字的常使用方法
- objective-c内存管理规则
- NineOldAndroids动画兼容库的使用-ViewHelper
- JAVA数据类型和MySql数据类型对应表