题目描述

有两个长度都是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个最小的和,相邻数字之间用空格隔开。

输入输出样例

输入样例#1:

3
2 6 6
1 4 8

输出样例#1:

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 序列合并相关推荐

  1. 洛谷 P1631 序列合并

    嗯... 题目链接:https://www.luogu.org/problem/P1631 这道题很明显的是一个堆的问题,要开一个结构体的堆(结构体中记录下标.内容.个数)... 首先,把A和B两个序 ...

  2. 洛谷 一种堆套路 P1631序列合并、P2085最小函数值

    题目链接 序列合并 最小函数值 题解 这两道题做法基本一样,是使用同一种套路解决的,这里用序列合并来举例说明. 序列合并要求出N2N2N^2个和中最小的N个数. 我们用一个堆来维护我们需要的数,并且保 ...

  3. 升序堆和降序堆(优先队列) 洛谷1801

    1 // 洛谷1801 2 // 一个升序堆,一个降序堆 3 // 降序堆维护序列的前i个最小值 4 // 插如元素的时候,如果x小于降序堆最大值,则替换,并将最大值插入升序堆:否则,直接插入升序堆 ...

  4. P1090 合并果子 / [USACO06NOV] Fence Repair G(贪心+优先队列) 洛谷

    题目描述 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多决定把所有的果子合成一堆. 每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和.可 ...

  5. 贪心算法——洛谷(P1090)[NOIP2004]合并果子

    该题目也属于经典的贪心算法,在这里熟悉C++里优先队列的使用. 需要导入头文件:   #include<queue> 从这个问题可以深挖出神奇的哈夫曼树问题. 因为这题里合并的是二叉树,所 ...

  6. P1631 序列合并

    题目描述 有两个长度都是N的序列A和B,在A和B中各取一个数相加可以得到N^2个和,求这N^2个和中最小的N个. 输入输出格式 输入格式: 第一行一个正整数N: 第二行N个整数Ai,满足Ai<= ...

  7. 【洛谷1090】合并果子

    题目描述 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多决定把所有的果子合成一堆. 每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和.可 ...

  8. 洛谷 P1645 序列 贪心

    题目描述 有一个整数序列,它的每个数各不相同,我们不知道它的长度是多少(即整数个数),但我们知道在某些区间中间至少有多少个整数,用区间(Li,Ri,Ci)来描述,表示这个整数序列中至少有Ci个数来自区 ...

  9. 洛谷P1775 石子合并(弱化版)

    原题传送门 题目描述 设有 N(N≤300)N(N \le 300)N(N≤300) 堆石子排成一排,其编号为1,2,3,⋯,N1,2,3,\cdots,N1,2,3,⋯,N.每堆石子有一定的质量 m ...

最新文章

  1. winform 异步更新ui
  2. 【网络流24题】D、魔术球问题(有向无环图的最小路径覆盖、思维)
  3. java微信群自动回复_微信自动回复机器人选哪个好?参考这四点
  4. java web利用mvc结构实现简单聊天室功能
  5. 强化学习(六)时序差分在线控制算法SARSA
  6. Linux内核编码风格
  7. 字符串转命令行字符图片
  8. [转载] python更新numpy_Python numpy从1.6更新到1.8
  9. 产品研发测试在敏捷各环节的职责
  10. [教程] MPICH2 Win7 VS2008环境搭建
  11. 编码器的历史以及未来发展前景
  12. 当浏览器版本过低时提示升级浏览器
  13. 【企业】全球顶级思维模式:建立思维模式,把握人性管理
  14. 《英语(二)》作文案例
  15. L2-3.名人堂与代金券
  16. idead 1099端口被占用 解决
  17. 在Chrome中选择了“始终允许在关联的应用中打开此类链接”,如何取消关联?
  18. 《统计会犯错——如何避免数据分析中的统计陷阱》—第2章膨胀的真理
  19. 手机查看html效果,使用IE浏览器查看页面手机端效果的方法
  20. C++ | C++ 重载运算符和重载函数

热门文章

  1. 使用equals判断对象是否相等出现的错误
  2. 自定义键盘组件_一文读懂!iOS系统组件的设计规范全解
  3. java 获取内存大小_JVM面试题扩展:Java代码在JVM中的执行流程
  4. python的django项目中怎么添加app_django下如何创建多个app并设置urls
  5. python集合运算符_Python 集合、字典、运算符
  6. linux 随机抽取文件,shell 随机从文件中抽取若干行的实现方法
  7. 计算机图案填充的两种方法,计算机图形学课件 第9讲 区域填充和字符处理.ppt...
  8. c语言中二分法100中找30,c语言中的二分法
  9. vscode php formatter mac配置_Mac上配置Vs code时,遇到的几个“坑”!
  10. lisp修改界址线属性_地籍与房产测量 A卷答案