题目描述
有两个长度都是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%的数据中,t满足1<=N<=100000。
题解
#include<bits/stdc++.h>
using namespace std;
struct cmp
{
bool operator ()(int x,int y)
{
return x>y;
}
};
priority_queue<int,vector<int>,cmp> q;
int a[1000010],b[1000010];
int main()
{
int n,i,j,k;
cin>>n;
for(i=1;i<=n;i++)
{
cin>>a[i];
}
for(i=1;i<=n;i++)
{
cin>>b[i];
}
int m;
if(sqrt(n)+1000<n) m=sqrt(n)+1000;
else m=n;
for(i=1;i<=m;i++)
{
for(j=1;j<=m;j++)
{
q.push(a[i]+b[j]);
}
}
int cnt=1;
while(cnt<=n)
{
cout<<q.top()<<" ";
q.pop();
cnt++;
}
return 0;
}