题目描述
现在有正整数集合 A 和 B,每个集合里有 N 个数,你要建立他们间的一一映射
将每对配对的数字相加可以得到 N 个和,你要做的就是最大化第 K 大的和
1≤K≤N≤100,000 输入的所有数字不超过 108
输入描述:
第一行 2 个数字 N,K
接下来两行,每行 N 个正整数,分别表示 A 和 B 中的元素
输出描述:
一行,表示第 K 大的和的最大值
示例1
输入
3 2
1 2 3
1 2 3
输出
5
思路
, 分别将前k大的数, 一个集合第i小的和另一个集合第i大的, 配对, 得出k个数最后最小的那个数就是答案。
#include<bits/stdc++.h>
using namespace std;
long long a1[123456],a2[123456];
bool cmp(long long a,long long b)
{
return a>b;
}
int main()
{
long long ans=2e8;
long long n,k;
cin>>n>>k;
for(int i=0;i<n;i++)
cin>>a1[i];
for(int i=0;i<n;i++)
cin>>a2[i];
sort(a1,a1+n);
sort(a2,a2+n);
for(int i=n-1;i>=n-k;i--)
{
ans=min(ans,a1[i]+a2[n-k+n-i-1]);
//进行对比选取每组里面最小的值
}
cout<<ans<<endl;
return 0;
}