CJOJ 2484 函数最小值 / Luogu 2085 函数最小值(STL优先队列,堆)
CJOJ 2484 函数最小值 / Luogu 2085 函数最小值(STL优先队列,堆)
Description
有n个函数,分别为F1,F2,...,Fn。定义 \(Fi(x)=Aix^2+Bix+Ci(x∈N^∗)\)。给定这些Ai、Bi和Ci,请求出所有函数的所有函数值中最小的m个(如有重复的要输出多个)。
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个二次函数,均满足\(Fi(x)=Aix^2+Bix+Ci\),x为正整数,a,b,c均为大于等于0的数,求所有函数的所有函数值中最小的m个,如果有重复则要输出多个
解决思路
想要做出这道题目,首先你要有基础的二次函数知识。
观察题目中的各个值的范围,首先因为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 函数最小值(STL优先队列,堆)的更多相关文章
- CJOJ 2482 【POI2000】促销活动(STL优先队列,大根堆,小根堆)
CJOJ 2482 [POI2000]促销活动(STL优先队列,大根堆,小根堆) Description 促销活动遵守以下规则: 一个消费者 -- 想参加促销活动的消费者,在账单下记下他自己所付的费用 ...
- 如何使用sql函数平均值、总数、最小值、最大值
使用sql函数,您可以在一个select语句的查询当中,直接计算数据库资料的平均值.总数.最小值.最大值.总和.标准差.变异数等统计.使用recordset对象时,也可使用这些sql函数. sql函数 ...
- 数据库开发基础-SQl Server 聚合函数、数学函数、字符串函数、时间日期函数
SQL 拥有很多可用于计数和计算的内建函数. 函数的语法 内建 SQL 函数的语法是: SELECT function(列) FROM 表 函数的类型 在 SQL 中,基本的函数类型和种类有若干种.函 ...
- SQL ServerOVER 子句,over开窗函数,SQL SERVER 开窗函数
https://technet.microsoft.com/zh-cn/library/ms189461(v=sql.105).aspx http://www.cnblogs.com/85538649 ...
- python函数: 内置函数
forthttp://blog.csdn.net/pipisorry/article/details/44755423 Python内置函数 Python内置(built-in)函数随着python解 ...
- C:函数指针、回调函数
函数指针 是一个指针,指向函数的指针,指针存放的都是地址,所以函数指针存放的是函数的地址.数组名就是数组的首地址,函数名就是函数的首地址.与数组类似. 代码demo int (*p) (int ,in ...
- C++ template学习一(函数模板和模板函数)
函数模板和模板函数(1)函数模板函数模板可以用来创建一个通用的函数,以支持多种不同的形参,避免重载函数的函数体重复设计.它的最大特点是把函数使用的数据类型作为参数.函数模板的声明形式为:templat ...
- python/匿名函数和内置函数
1 匿名函数 匿名函数是lambda定义的没有名字的具有一些小功能的函数 具体形式是 lambda 参数列表:返回值表达式 lambda x: X**2 # 求平方操作 lambda x: x> ...
- Python第七天 函数 函数参数 函数里的变量 函数返回值 多类型传值 函数递归调用 匿名函数 内置函数
Python第七天 函数 函数参数 函数里的变量 函数返回值 多类型传值 函数递归调用 匿名函数 内置函数 目录 Pycharm使用技巧(转载) Python第一天 ...
随机推荐
- .net Core1.0 邮件发送
今天一天早,公司需要将之前的.net Core项目增加一个预处理机制,就是当程序出现异常后给我们的开发人员发送邮件,因为今天写些关于.netCore上发送邮件. 根据查阅资料发现在目前的Core1.0 ...
- 关于querySelectorAll的一个坑
刚学JS的DOM操作时,就知道了匹配一堆元素,会获得NodeList和HTMLCollection这两个对象,不过当时并没有深入去研究两者的区别 因为无论是NodeList还是HTMLCollecti ...
- 以太坊RLP用法-go-ethereum学习
RLP (递归长度前缀)提供了一种适用于任意二进制数据数组的编码,RLP已经成为以太坊中对对象进行序列化的主要编码方式.RLP的唯一目标就是解决结构体的编码问题:对原子数据类型(比如,字符串,整数型, ...
- Java之反射--练习
定义Student 类:包含:姓名和年龄等属性,有参和无参构造方法,输出所有信息的方法 1.使用多种方法生成一个Student类的Class对象 2.使用Class类获取Student类的结构信息并输 ...
- (转)Windows下tail命令工具(转)
因为随笔无转载按钮,先说明原文地址是: Windows 下 tail 查看日志命令工具分享 使用方法: 下载后解压,把tail.exe 复制到 目录:C:\Windows\System32 下 文件下 ...
- 新增article注意事项
默认情况下在日志复制中如果新增加Article那么需要产生一个包含所有Article的Snapshot.由于产生Snapshot会加锁,同时会产生IO操作,所以对于大的数据库性能影响是很大的. 可以通 ...
- node项目的基本构建流程或者打开一个node项目的流程
1. 确立项目所需要的所有依赖.框架(比如bootstrap,vue,angular等) 2. 在项目的根目录下创建一个package.json文件,package.json文件是项目的最重要文件之 ...
- flask 扩展之 -- flask-script
一. 使用 Flask-Script 支持命令行选项 1. 安装 $ pip install flask-script 2. 配置 from flask_script import Manager m ...
- PHP完成一个日历
今天我们就用php中的数组合date 做一个日历. 先让我们回顾一下PHP里面的date . 1.时间戳:表示从计算机元年/UNIX纪年(0时区 1970/1/1 00:00:00)到当前事件的秒数. ...
- h5之scrollIntoView控制页面元素滚动
如果滚动页面也是DOM没有解决的一个问题.为了解决这个问题,浏览器实现了一下方法,以方便开发人员如何更好的控制页面的滚动.在各种专有方法中,HTML5选择了scrollIntoView()作为标准方法 ...