[优先队列] 洛谷 P1631 序列合并
题目描述
有两个长度都是N的序列A和B,在A和B中各取一个数相加可以得到N^2N2个和,求这N^2N2个和中最小的N个。
输入输出格式
输入格式:
第一行一个正整数N;
第二行N个整数A_iAi, 满足A_i\le A_{i+1}Ai≤Ai+1且A_i\le 10^9Ai≤109;
第三行N个整数B_iBi, 满足B_i\le B_{i+1}Bi≤Bi+1且B_i\le 10^9Bi≤109.
【数据规模】
对于50%的数据中,满足1<=N<=1000;
对于100%的数据中,满足1<=N<=100000。
输出格式:
输出仅一行,包含N个整数,从小到大输出这N个最小的和,相邻数字之间用空格隔开。
输入输出样例
3 2 6 6 1 4 8
3 6 7
题解
- 其实就是每次找最小的两个,但是题目是每个数可以用多次,如何不重复的去做才是终点
- 首先,对于A序列的第一个数一定是要选的,那么就可以先把B数列中所有数与它的和加入优先队列中,并记录下当前与A序列第一个数相加,可以用P数组存
- 那么每次就输出队首,这个没问题吧
- 然后将对首的A数列变后一个,将之前记录P数组+1,再加上自己,再加入队列里
代码
1 #include <cstdio> 2 #include <queue> 3 #include <vector> 4 #define N 100010 5 using namespace std; 6 priority_queue<pair<int,int>,vector<pair<int,int> >,greater<pair<int,int> > >Q; 7 int n,k,a[N],b[N],p[N]; 8 int main() 9 { 10 scanf("%d",&n); 11 for (int i=1;i<=n;i++) scanf("%d",&a[i]); 12 for (int i=1;i<=n;i++) scanf("%d",&b[i]),p[i]=1,Q.push(make_pair(a[1]+b[i],i)); 13 while (n--) printf("%d ",Q.top().first),k=Q.top().second,Q.pop(),Q.push(make_pair(a[++p[k]]+b[k],k)); 14 }
转载于:https://www.cnblogs.com/Comfortable/p/10327991.html
[优先队列] 洛谷 P1631 序列合并相关推荐
- 洛谷 P1631 序列合并
嗯... 题目链接:https://www.luogu.org/problem/P1631 这道题很明显的是一个堆的问题,要开一个结构体的堆(结构体中记录下标.内容.个数)... 首先,把A和B两个序 ...
- 洛谷 一种堆套路 P1631序列合并、P2085最小函数值
题目链接 序列合并 最小函数值 题解 这两道题做法基本一样,是使用同一种套路解决的,这里用序列合并来举例说明. 序列合并要求出N2N2N^2个和中最小的N个数. 我们用一个堆来维护我们需要的数,并且保 ...
- 升序堆和降序堆(优先队列) 洛谷1801
1 // 洛谷1801 2 // 一个升序堆,一个降序堆 3 // 降序堆维护序列的前i个最小值 4 // 插如元素的时候,如果x小于降序堆最大值,则替换,并将最大值插入升序堆:否则,直接插入升序堆 ...
- P1090 合并果子 / [USACO06NOV] Fence Repair G(贪心+优先队列) 洛谷
题目描述 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多决定把所有的果子合成一堆. 每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和.可 ...
- 贪心算法——洛谷(P1090)[NOIP2004]合并果子
该题目也属于经典的贪心算法,在这里熟悉C++里优先队列的使用. 需要导入头文件: #include<queue> 从这个问题可以深挖出神奇的哈夫曼树问题. 因为这题里合并的是二叉树,所 ...
- P1631 序列合并
题目描述 有两个长度都是N的序列A和B,在A和B中各取一个数相加可以得到N^2个和,求这N^2个和中最小的N个. 输入输出格式 输入格式: 第一行一个正整数N: 第二行N个整数Ai,满足Ai<= ...
- 【洛谷1090】合并果子
题目描述 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多决定把所有的果子合成一堆. 每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和.可 ...
- 洛谷 P1645 序列 贪心
题目描述 有一个整数序列,它的每个数各不相同,我们不知道它的长度是多少(即整数个数),但我们知道在某些区间中间至少有多少个整数,用区间(Li,Ri,Ci)来描述,表示这个整数序列中至少有Ci个数来自区 ...
- 洛谷P1775 石子合并(弱化版)
原题传送门 题目描述 设有 N(N≤300)N(N \le 300)N(N≤300) 堆石子排成一排,其编号为1,2,3,⋯,N1,2,3,\cdots,N1,2,3,⋯,N.每堆石子有一定的质量 m ...
最新文章
- winform 异步更新ui
- 【网络流24题】D、魔术球问题(有向无环图的最小路径覆盖、思维)
- java微信群自动回复_微信自动回复机器人选哪个好?参考这四点
- java web利用mvc结构实现简单聊天室功能
- 强化学习(六)时序差分在线控制算法SARSA
- Linux内核编码风格
- 字符串转命令行字符图片
- [转载] python更新numpy_Python numpy从1.6更新到1.8
- 产品研发测试在敏捷各环节的职责
- [教程] MPICH2 Win7 VS2008环境搭建
- 编码器的历史以及未来发展前景
- 当浏览器版本过低时提示升级浏览器
- 【企业】全球顶级思维模式:建立思维模式,把握人性管理
- 《英语(二)》作文案例
- L2-3.名人堂与代金券
- idead 1099端口被占用 解决
- 在Chrome中选择了“始终允许在关联的应用中打开此类链接”,如何取消关联?
- 《统计会犯错——如何避免数据分析中的统计陷阱》—第2章膨胀的真理
- 手机查看html效果,使用IE浏览器查看页面手机端效果的方法
- C++ | C++ 重载运算符和重载函数
热门文章
- 使用equals判断对象是否相等出现的错误
- 自定义键盘组件_一文读懂!iOS系统组件的设计规范全解
- java 获取内存大小_JVM面试题扩展:Java代码在JVM中的执行流程
- python的django项目中怎么添加app_django下如何创建多个app并设置urls
- python集合运算符_Python 集合、字典、运算符
- linux 随机抽取文件,shell 随机从文件中抽取若干行的实现方法
- 计算机图案填充的两种方法,计算机图形学课件 第9讲 区域填充和字符处理.ppt...
- c语言中二分法100中找30,c语言中的二分法
- vscode php formatter mac配置_Mac上配置Vs code时,遇到的几个“坑”!
- lisp修改界址线属性_地籍与房产测量 A卷答案