时间限制: 1 s
空间限制: 128000 KB
题目等级 : 钻石 Diamond
题目描述 Description
有两个长度为 N 的序列 A 和 B,在 A 和 B 中各任取一个数可以得到 N^2 个和,求这N^2 个和中最小的 N个。
输入描述 Input Description
第一行输入一个正整数N;第二行N个整数Ai 且Ai≤10^9;第三行N个整数Bi, 且Bi≤10^9
输出描述 Output Description
输出仅一行,包含 n 个整数,从小到大输出这 N个最小的和,相邻数字之间用 空格隔开。
样例输入 Sample Input
5
1 3 2 4 5 6 3 4 1 7
样例输出 Sample Output
2 3 4 4 5
数据范围及提示 Data Size & Hint
【数据规模】 对于 100%的数据,满足 1≤N≤100000。
1 #include<iostream>
2 #include<cstdio>
3 #include<queue>
4 #include<algorithm>
5 using namespace std;
6 int a[100001];
7 int b[100001];
8 priority_queue<int>ans;
9 int can[1001][1001];
10 int c[100001];
11 int main()
12 {
13 int n;
14 scanf("%d",&n);
15 for(int i=1;i<=n;i++)
16 scanf("%d",&a[i]);
17 for(int i=1;i<=n;i++)
18 scanf("%d",&b[i]);
19 sort(a+1,a+n+1);
20 sort(b+1,b+n+1);
21 int now=1;
22 for(int i=1;i<=n;i++)
23 {
24 ans.push(a[1]+b[i]);
25 }
26 for(int i=2;i<=n;i++)
27 {
28 for(int j=1;j<=n;j++)
29 {
30 int sum=a[i]+b[j];
31 if(sum>=ans.top())
32 {
33 break;
34 }
35 else
36 {
37 ans.pop();
38 ans.push(sum);
39 }
40 }
41 }
42 //now=1;
43 for(int i=1;i<=n;i++)
44 {
45 c[i]=ans.top();
46 ans.pop();
47 }
48 for(int i=n;i>=1;i--)
49 printf("%d ",c[i]);
50 return 0;
51 }
就是不用堆,偏用优先队列=.=
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有