题目描述

有n个函数,分别为F1,F2,…,Fn。定义Fi(x)=Ai*x^2+Bi*x+Ci (x∈N*)。给定这些Ai、Bi和Ci,请求出所有函数的所有函数值中最小的m个(如有重复的要输出多个)。

输入输出格式

输入格式:

输入数据:第一行输入两个正整数n和m。以下n行每行三个正整数,其中第i行的三个数分别位Ai、Bi和Ci。Ai<=10,Bi<=100,Ci<=10 000。

输出格式:

输出数据:输出将这n个函数所有可以生成的函数值排序后的前m个元素。这m个数应该输出到一行,用空格隔开。

输入输出样例

输入样例#1:

3 10

4 5 3

3 4 5

1 7 1

输出样例#1:

9 12 12 19 25 29 31 44 45 54

说明

数据规模:n,m<=10000


典型的小根堆维护.

#include<stdio.h>
#include<queue>
using namespace std;
const int maxN = (int)1e4;
struct parameter
{
int a, b, c;
}f[maxN];
struct item
{
int val, k, x;
item(int _val, int _k, int _x): val(_val), k(_k), x(_x){}
friend int operator <(item x, item y)
{
return x.val > y.val;
}
};
priority_queue<item>Q;
int main()
{
int n, m;
scanf("%d%d", &n, &m);
for(int i = 0; i < n; i ++)
scanf("%d%d%d", &f[i].a, &f[i].b, &f[i].c);
for(int i = 0; i < n; i ++)
Q.push(item(f[i].a + f[i].b + f[i].c, i, 1));
for(int i = 0; i < m; i ++)
{
printf("%d ", Q.top().val);
int x = Q.top().x + 1;
int k = Q.top().k;
Q.pop();
Q.push(item(f[k].a * x * x + f[k].b * x + f[k].c, k, x));
}
}

优先队列这种东西需要找感觉,再来一题

题目描述

有两个长度都是N的序列A和B,在A和B中各取一个数相加可以得到N^2个和,求这N^2个和中最小的N个。

输入输出格式

输入格式:

第一行一个正整数N;

第二行N个整数Ai,满足Ai<=Ai+1且Ai<=10^9;

第三行N个整数Bi, 满足Bi<=Bi+1且Bi<=10^9.

【数据规模】

对于50%的数据中,满足1<=N<=1000;

对于100%的数据中,满足1<=N<=100000。

输出格式:

输出仅一行,包含N个整数,从小到大输出这N个最小的和,相邻数字之间用空格隔开。

输入输出样例

输入样例#1:

3

2 6 6

1 4 8

输出样例#1:

3 6 7


令两个序列的元素分别为

A0, A1, A2, …, An-1

B0, B1, B2, …, Bn-1

且有

Ai <= Ai + 1

Bi <= Bi + 1

则有

A0 + B0 <= A0 + B1 <= A0 + B2 <= … <= A0 + Bn - 1

A1 + B0 <= A1 + B1 <= A1 + B2 <= … <= A1 + Bn - 1

.

.

.

An - 1 + B0 <= An-1 + B1 <= An - 1 + B2 <= … <= An - 1 + Bn - 1

那么,可将A[0~n-1] + B[0]入队

每次取出队头

令当前取出队头为Ax + By, 则将Ax + By + 1入队(需先判断是否越界)即可.

#include<stdio.h>
#include<algorithm>
#include<queue>
using namespace std;
const int maxN = (int)1e5;
int a[maxN];
int b[maxN];
struct item
{
int s, b;
item(int _s, int _b)
{
s = _s;
b = _b;
}
int friend operator <(item x, item y)
{
return x.s > y.s;
}
};
priority_queue<item> q;
int main()
{
int n;
scanf("%d", &n);
for(int i = 0; i < n; i ++)
scanf("%d", &a[i]);
for(int i = 0; i < n; i ++)
scanf("%d", &b[i]);
sort(a, a + n);
sort(b, b + n);
for(int i = 0; i < n; i ++)
q.push(item(a[i] + b[0], 0));
for(int i = 0; i < n; i ++)
{
item tmp = q.top();
int s = tmp.s;
int _b = tmp.b;
q.pop();
printf("%d ", s);
if(_b + 1 < n)
q.push(item(tmp.s - b[_b] + b[_b + 1], _b + 1));
}
}

洛谷2085最小函数值(minval) + 洛谷1631序列合并的更多相关文章

  1. 洛谷P2085 最小函数值(minval)

    P2085 最小函数值(minval) 218通过 487提交 题目提供者该用户不存在 标签堆高级数据结构 难度普及+/提高 提交该题 讨论 题解 记录 最新讨论 暂时没有讨论 题目描述 有n个函数, ...

  2. 洛谷P2085最小函数值题解

    题目 首先我们先分析一下题目范围,\(a,b,c\) 都是整数,因此我们可以得出它的函数值在\((0,+\infty )\)上是单调递增的,,然后我们可以根据函数的性质,将每个函数设置一个当前指向位置 ...

  3. [洛谷P2085]最小函数值

    题目大意:有n个函数,分别为F1,F2,...,Fn.定义Fi(x)=Ai*x^2+Bi*x+Ci (x∈N*).给定这些Ai.Bi和Ci,要求出所有函数的所有函数值中最小的m个(如有重复的要输出多个 ...

  4. 洛谷P2085——最小函数值

    题目描述 有n个函数,分别为\(F_1,F_2,...,F_n\).定义\(F_i(x)=A_i*x^2+B_i*x+C_i (x∈N*)\).给定这些\(A_i.B_i和C_i\),请求出所有函数的 ...

  5. 洛谷 P2085 最小函数值

    目录 题目 思路 \(Code\) 题目 戳 思路 首先这些函数全部单带递增,因为\(a\),\(b\),\(c\)都是正整数. 我们将全部的函数的\(x\)为\(1\)时的函数值放入优先度列(小根堆 ...

  6. P2085 最小函数值(minval)

    题目描述 有n个函数,分别为F1,F2,...,Fn.定义Fi(x)=Aix^2+Bix+Ci (x∈N*).给定这些Ai.Bi和Ci,请求出所有函数的所有函数值中最小的m个(如有重复的要输出多个). ...

  7. P2085最小函数值(优先队列)

    P2085 最小函数值(minval) 题目描述 有n个函数,分别为F1,F2,...,Fn.定义Fi(x)=Ai*x^2+Bi*x+Ci (x∈N*).给定这些Ai.Bi和Ci,请求出所有函数的所有 ...

  8. 洛谷4951 地震 bzoj1816扑克牌 洛谷3199最小圈 / 01分数规划

    洛谷4951 地震 #include<iostream> #include<cstdio> #include<algorithm> #define go(i,a,b ...

  9. 洛谷P1631 序列合并

    P1631 序列合并 236通过 657提交 题目提供者xmyzwls 标签堆 难度普及+/提高 提交该题 讨论 题解 记录 最新讨论 为什么不行? 题目描述 有两个长度都是N的序列A和B,在A和B中 ...

随机推荐

  1. python项目中输出指定颜色的日志

    起因 在开发项目过程中,为了方便调试代码,经常会向stdout中输出一些日志,默认的这些日志就直接显示在了终端中.而一般的应用服务器,第三方库,甚至服务器的一些通告也会在终端中显示,这样就搅乱了我们想 ...

  2. TCP/IP网络编程之多种I/O函数

    send和recv函数 在之前的学习中,我们在不少示例中用到send和recv这两个函数,但一直没有详细解释过着两个函数中每个参数的含义.本节将介绍Linux平台下的send&recv函数 # ...

  3. imageX

    imageX 编辑 ImageX 是一个命令行工具,原始设备制造商 (OEM) 和公司可以使用它来捕获.修改和应用基于文件的磁盘映像以进行快速部署.ImageX 可以使用 Windows 映像 (.w ...

  4. C#实现eval 进行四则运算(有码)

    在JavaScript中实现四则运算很简单,只需要调用eval函数就行了,但是不知道什么原因万能的.NET却没有封装这个函数~ 在这里为大家封装了一个C#版本的eval函数,具体的设计参考了<大 ...

  5. 设计模式之第11章-建造者模式(Java实现)

    设计模式之第11章-建造者模式(Java实现) “那个餐厅我也是醉了...”“怎么了?”“上菜顺序啊,竟然先上甜品,然后是冷饮,再然后才是菜什么的,无语死了.”“这个顺序也有人这么点的啊.不过很少就是 ...

  6. Win7系统安装MySQL5.5.21图解

    Win7系统安装MySQL5.5.21图解 大家都知道MySQL是一款中.小型关系型数据库管理系统,很具有实用性,对于我们学习很多技术都有帮助,前几天我分别装了SQL Server 2008和Orac ...

  7. pythonic编程示例及简析

    1.列表 list[起始:结尾:增量] 值传递与地址传递 a = [2,1] b = a #地址传递 b = a[:] 值传递 a.sort() print a #[1,2] print b #[1, ...

  8. hnust 懒人多动脑

    问题 F: 懒人得多动脑 时间限制: 1 Sec  内存限制: 128 MB提交: 93  解决: 30[提交][状态][讨论版] 题目描述 小D的家A和学校B都恰好在以点F为焦点的双曲线上,而小D每 ...

  9. 精通CSS高级Web标准解决方案(7、布局)

    7.1 让设计居中 7.1.1 使用自动空白边让设计居中 <body> <div id="wrapper"> </div> </body& ...

  10. springmvc和struts2的区别比较

    1.Struts2是类级别的拦截, 一个类对应一个request上下文,SpringMVC是方法级别的拦截,一个方法对应一个request上下文,而方法同时又跟一个url对应,所以说从架构本身上Spr ...