题目描述

有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. Gpfixup

    Updated: April 17, 2012 Applies To: Windows Server 2003, Windows Vista, Windows Server 2008, Windows ...

  2. bash shell命令与监测的那点事(一)

    bash shell命令与监测的那点事之ps 学习LInux,不得不谈谈bash shell命令,介绍Linux命令行与Shell脚本的书有很多很多,bash shell命令也有很多,此次我们只谈谈有 ...

  3. 【Luogu P1661】扩散

    题目: 一个点每过一个单位时间就会向四个方向扩散一个距离,如图. 两个点$a$.$b$连通,记作$e(a,b)$,当且仅当$a$.$b$的扩散区域有公共部分.连通块的定义是块内的任意两个点$u$.$v ...

  4. windows下使用grunt

    grunt官网:http://www.gruntjs.org/ 一.安装grunt 先安装node,在http://www.nodejs.org/可以下载安装包直接安装.在命令行下运行: npm in ...

  5. IOS架构

    iPhone OS(现在叫iOS)是iPhone, iPod touch 和 iPad 设备的操作系统. 1,Core OS: 是用FreeBSD和Mach所改写的Darwin, 是开源.符合POSI ...

  6. CSU-1985 驱R符

    CSU-1985 驱R符 Description 阴阳师中有三中稀有度的式神R,SR,SSR,其中R的稀有度最低,每次抽符,会随机得到一种式神,然而子浩君对R式神已经深恶痛绝. 某天,子浩君突然发现, ...

  7. Leetcode 507.完美数

    完美数 对于一个 正整数,如果它和除了它自身以外的所有正因子之和相等,我们称它为"完美数". 给定一个 正整数 n, 如果他是完美数,返回 True,否则返回 False 示例: ...

  8. jquery操作select(取值,设置选中

    比如<select class="selector"></select> 1.设置value为pxx的项选中 $(".selector" ...

  9. Kotlin-Not enough information to infer parameter T in fun<T:View> findViewById(id: Int): T!

    代码改变世界 错误: Type inference failed : Not enough information to infer parameter T in fun<T:View> ...

  10. Win右键管理员权限的获取

    Windows Registry Editor Version 5.00 ;取得文件修改权限 [HKEY_CLASSES_ROOT\*\shell\runas] @="管理员权限" ...