题意:a数组n个数字给定,b数组m个数字中选出n个,与a数组对应差的绝对值和最大。
分析:如果b数组也是n个数字,那么a和b排序后,a最小匹配b最大(a1 bn),依次(a2 bn-1).。。。。。
现在b数组数量多过a数组,那么选取规则(贪心)就演变成b数组前面的k个数字和a数组后k个数字匹配。b数组后面n-k个数字和a数组前n-k个匹配。如图:
为求出这个合适的K值,需要枚举。下面代码先从k=n开始计算,当k为n-1时,原本abs(a1-bn)变为abs(a1-bm),依次类推。
#include <bits/stdc++.h>
using namespace std;
int n,m,a[200005],b[200005];
int main()
{
int t,i,j;
cin>>t;
while(t--)
{
cin>>n>>m;
for(i=1; i<=n; i++)
cin>>a[i];
sort(a+1,a+n+1);