https://vijos.org/p/1662
把两个a,b从小到大排序,此时绝对值差最大的绝对是a头-b尾或者b头-a尾,最后累加起来即可
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<queue>
#include<cstdlib>
#define ms(i,j) memset(i,j,sizeof(i));
using namespace std;
int a[1000005];
int b[1000005];
int n,k;
long long ans = 0;
int main()
{
scanf("%d%d", &n, &k);
for (int i=0;i<n;i++) scanf("%d", &a[i]);
for (int i=0;i<n;i++) scanf("%d", &b[i]);
sort(a,a+n); sort(b,b+n);
int a1 = 0, a2 = n-1, b1 = 0, b2 = n-1;
for (int i=0;i<k;i++)
{
if (abs(a[a1]-b[b2])>abs(b[b1]-a[a2]))
{
ans += abs(a[a1]-b[b2]);
a1++, b2--;
} else
{
ans += abs(b[b1]-a[a2]);
b1++, a2--;
}
}
printf("%lld\n", ans);
return 0;
}