CF1921D题解
Eternity_Yoke · · 题解
题目大意
给定两个数组,
在
要求
解题思路
容易想到用
但到了中间某处会存在更优解,即此时
考虑进行两次遍历。
第一次用
第二次用
最终两次中
参考代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=2e5+5;
int t,n,m,x,y;
ll D;
int a[N],b[N],f1[N],f2[N];
int main()
{ ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
cin>>t;
while(t--)
{ cin>>n>>m;
for(int i=1;i<=n;i++)
cin>>a[i];
for(int i=1;i<=m;i++)
cin>>b[i];
sort(a+1,a+n+1);
sort(b+1,b+m+1);
for(int i=1;i<=n;i++)
{ f1[i]=abs(a[i]-b[m-i+1]);
f2[i]=abs(a[i]-b[n-i+1]);
}
D=0;
for(int i=1;i<=n;i++)
D+=max(f1[i],f2[i]);
cout<<D<<endl;
}
return 0;
}