```cpp
for(register int i = 1; i <= n; i++) scanf("%d", &a[i]);
for(register int i = 1; i <= n; i++) scanf("%d", &b[i]);
for(register int i = 1; i <= n; i++){
for(register int j = 1; j <= n; j++){
if(q.size() < n) q.push(a[i] + b[j]);
else{
if(q.top() > a[i] + b[j]) q.pop(), q.push(a[i] + b[j]);
else break;
}
}
}
```
我的部分代码,参考一下?
不需要全部push进去,只要够了及时break就行
by szkzyc @ 2021-11-07 07:55:41
@[szkzyc](/user/402269) 谢谢
by Shiota_Kaede @ 2021-11-07 07:57:35
@[_JY_](/user/400269) 最后输出的时候记得用数组存全部元素再反向输出
by szkzyc @ 2021-11-07 08:06:47
@[szkzyc](/user/402269) 也就是用大根堆吗
by Shiota_Kaede @ 2021-11-07 08:08:11
@[_JY_](/user/400269) yes
by szkzyc @ 2021-11-07 08:11:34
你这第一个代码跟我开始写的一模一样
```
#include<bits/stdc++.h>
#include<queue>
using namespace std;
int n;
int b[100000000];
inline int read(){//快读
int x=0,f=1;char ch=getchar();
while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}
while (ch>='0'&&ch<='9'){x=x*10+ch-48;ch=getchar();}
return x*f;
}
priority_queue<int,vector<int>,greater<int> > q;
main(){
n=read();
for(int i=1;i<=n;i++) b[i]=read();
for(int i=1;i<=n;i++){
int a=read();
for(int j=1;j<=n;j++){
q.push(a+b[j]);
}
}
for(int i=1;i<=n;i++){
cout<<q.top()<<" ";
q.pop();
}
}
```
这是我最开始写的
by 1711Elegy @ 2023-05-21 17:05:39
哦,写出来了
数据大了之后不用全放进去(受了点小启发)
```
#include<bits/stdc++.h>
#include<queue>
using namespace std;
int n;
int a[100000000],b[100000000];
inline int read(){//快读
int x=0,f=1;char ch=getchar();
while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}
while (ch>='0'&&ch<='9'){x=x*10+ch-48;ch=getchar();}
return x*f;
}
priority_queue<int,vector<int>,greater<int> > q;//小更堆
main(){
n=read();
for(int i=1;i<=n;i++) a[i]=read();
for(int i=1;i<=n;i++) b[i]=read();
if(n>2000){//数据太大就不全放进去
for(int i=1;i<n/35;i++){
for(int j=1;j<=n/35;j++){
q.push(a[i]+b[j]);
}
}
}
else{//数据小一点,就全放进去算了
for(int i=1;i<n;i++){
for(int j=1;j<=n;j++){
q.push(a[i]+b[j]);
}
}
}
for(int i=1;i<=n;i++){
printf("%d ",q.top());
q.pop();
}
}
```
然后就过了
by 1711Elegy @ 2023-05-21 17:28:47