传送门


解题思路

首先读入a、b数组后,sort一遍(从小到大),然后把a[1]+b[1],a[2]+b[1],a[3]+b[1]……a[n]+b[1]全部加入一个优先队列q(小根堆)。

然后从一到n循环,每一次取出队列中的最小的元素(假设是a[i]+b[j]),输出数值,然后把数值修改为a[i]+b[j+1],存入队列。

为什么呢?

很显然,我们把所有可能的情况列成一张表:

a[1]+b[1],a[2]+b[1],a[3]+b[1],……,a[n]+b[1];

a[1]+b[2],a[2]+b[2],a[3]+b[2],……,a[n]+b[2];

…………………………………………………………;

a[1]+b[n],a[2]+b[n],a[3]+b[n],……,a[n]+b[n]。

很显然,在这张表中,对于每一个数都一定小于它右下方的所有的数。

换一种说法,就是在第[i,j]个数为成为当前最小值时,它右下方的数不可能成为当前最小值。

所以只有在第[i,j]个数成为当前最小值时,把第[i+1][j]加入队列,继续比较。(也就是纵向更新)。

AC代码

 #include<iostream>
#include<algorithm>
#include<cstdio>
#include<queue>
using namespace std;
const int maxn=;
int n,a[maxn],b[maxn];
struct node{
int ans,bb;
bool operator < (const node &x)const{
return ans>x.ans;
}
};
priority_queue<node> q;
int main()
{
cin>>n;
for(int i=;i<=n;i++) cin>>a[i];
for(int i=;i<=n;i++) cin>>b[i];
sort(a+,a+n+);
sort(b+,b+n+);
for(int i=;i<=n;i++){
node x;
x.ans=a[i]+b[];
x.bb=;
q.push(x);
}
for(int i=;i<=n;i++){
node now=q.top();
q.pop();
cout<<now.ans<<" ";
now.bb++;
now.ans=now.ans+b[now.bb]-b[now.bb-];
q.push(now);
}
return ;
}

洛谷 P1631 序列合并(优先队列)的更多相关文章

  1. 洛谷P1631 序列合并

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

  2. 洛谷 - P1631 - 序列合并 - 堆

    https://www.luogu.org/problemnew/show/P1631 序列a中每个数首先都和序列b中的最小元素配对(虽然好像不是很必要这么早插进来?) 每次从堆顶取出最小的和输出答案 ...

  3. 洛谷 P1631 序列合并

    题意简述 有两个长度都是N的序列A和B,在A和B中各取一个数相加可以得到N^2个和,求这N^2个和中最小的N个. 题解思路 大根堆,先存入n个和,再比较大小,改变堆中元素. 代码 #include & ...

  4. 洛谷2085最小函数值(minval) + 洛谷1631序列合并

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

  5. 洛谷P1880 石子合并(区间DP)(环形DP)

    To 洛谷.1880 石子合并 题目描述 在一个园形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分. 试设计出1 ...

  6. P1631 序列合并

    P1631 序列合并 有两个长度都是N的序列A和B,在A和B中各取一个数相加可以得到N^2N2个和,求这N^2N2个和中最小的N个. 对于100%的数据中,满足1<=N<=100000. ...

  7. 洛谷 P4597 序列sequence 解题报告

    P4597 序列sequence 题目背景 原题\(\tt{cf13c}\)数据加强版 题目描述 给定一个序列,每次操作可以把某个数\(+1\)或\(-1\).要求把序列变成非降数列.而且要求修改后的 ...

  8. [洛谷P2127] 序列排序

    洛谷题目链接:序列排序 题目描述 小C有一个N个数的整数序列,这个序列的中的数两两不同.小C每次可以交换序列中的任意两个数,代价为这两个数之和.小C希望将整个序列升序排序,问小C需要的最小代价是多少? ...

  9. 洛谷P4891 序列 || 膜法阵,魔法阵

    https://www.luogu.org/problemnew/show/P4891 一道几乎一样的题http://210.33.19.103/contest/1130/problem/3 题面ht ...

随机推荐

  1. MongoDB学习笔记 1.1

    //1.安装MongoDB数据库 cd D:\Software\MongoDB\data\bin mongod --dbpath "D:\Software\MongoDB\data\db&q ...

  2. API网关原理

    1.API网关介绍 API网关是一个服务器,是系统的唯一入口.从面向对象设计的角度看,它与外观模式类似.API网关封装了系统内部架构,为每个客户端提供一个定制的API.它可能还具有其它职责,如身份验证 ...

  3. R-CNN常见问题

    可以不进行特定样本下的微调吗?可以直接采用AlexNet CNN网络的特征进行SVM训练吗? 不针对特定任务进行微调,而将CNN当成特征提取器,pool5层得到的特征是基础特征,类似于HOG.SIFT ...

  4. 【技术分享:python 应用之三】使用 python 修改 excel 表格的 sheet 名称

    原始需求:已经下载好了 Excel 文件,但是 Excel 里的 sheet 的名称想要修改一下,比如原本默认的是sheet1,需要修成“DNEWCD_JQJSHMX”.需求比较简单,直接上代码吧! ...

  5. 2-gitblit添加项目,项目成员

    创建代码仓库,如下图所示, 然后填个项目的名称和描述即可点击保存. 用户也是,还是相同的位置,点击用户,而不是用户中心,创建用户也是填写用户名称和简称,最后对在旁边有个用户的权限,选择相应的代码仓库即 ...

  6. IT界须知的故事——仙童八叛徒

    原文:http://blog.sina.com.cn/s/blog_457012450100vnbl.html 许多电脑史学家都认为,要想了解美国硅谷的发展史,就必须了解早期的仙童半导体公司.这家公司 ...

  7. sqli-lab(37)

    0X01 看看源码 what is mean? 定义和用法 mysql_real_escape_string() 函数转义 SQL 语句中使用的字符串中的特殊字符. 下列字符受影响: \x00 \n ...

  8. 大哥带我们的mysql注入 基于时间的盲注

    ?id= and ,,sleep()) ?id= and ,,sleep()) if语句/if()函数 在基于时间型SQL盲注中,我们经常使用条件语句来判断我们的操作是否正确: ?id= and = ...

  9. centos7 修改ali yum源

    centos7 修改yum源为阿里源,某下网络下速度比较快 首先是到yum源设置文件夹里 安装base reop源 cd /etc/yum.repos.d 接着备份旧的配置文件 sudo mv Cen ...

  10. 解决img标签与其它标签间隙问题?

    解决img标签间距问题 关于img标签间距问题:多个img之间有间距,包含img标签的div之间有间距 代码如下: <!DOCTYPE html> <html> <hea ...