2020牛客寒假算法基础集训营6 A 配对
https://ac.nowcoder.com/acm/contest/3007/A
题目描述
现在有正整数集合 A 和 B,每个集合里有 N 个数,你要建立他们间的一一映射
将每对配对的数字相加可以得到 N 个和,你要做的就是最大化第 K 大的和
1≤K≤N≤100,000 输入的所有数字不超过 1e8
思路
贪心~  为嘛我一开始没想起来 
第K大就是第(N - K + 1)小,让比它小的尽可能小,把小的数都给后面的,然后其余的交错相加,上面最大的+下面剩余的最小的,从里面选择一个最小值就是答案
#include <bits/stdc++.h>
using namespace std;
int n, k;
const int N = 1e5 + 10;
int a[N], b[N];
int main()
{
	scanf("%d %d", &n, &k);
	for (int i = 1; i <= n; i++){
		scanf("%d", a + i);
	}
	for (int i = 1; i <= n; i++){
		scanf("%d", b + i);
	}
	k = n - k + 1;
	sort(a + 1, a + 1 + n);
	sort(b + 1, b + 1 + n);
	vector<int> vec;
	for (int i = k, j = n; i <= n; i++, j--){
		vec.push_back(a[i] + b[j]);
	}
	sort(vec.begin(), vec.end());
	printf("%d\n", *vec.begin());
	return 0;
}
本文来自博客园,作者:correct,转载请注明原文链接:https://www.cnblogs.com/correct/p/12861938.html

                
            
        
浙公网安备 33010602011771号