CF1898D Absolute Beauty 题解

思路

容易发现,如果 \(a_i>b_i\) 则将 \(a_i\)\(b_i\) 交换。

在数轴上标出要交换的四个数的位置若线段 \(a_ib_i\) 和 线段 \(a_jb_j\) 互不相交,此时交换比两条线段处于其他位置时更优。

具体证明这里就不再赘述,其他题解讲的已经很清楚了。

所以只需交换最大的 \(a_i\) 和最小的 \(b_j\) 即可。

代码

#include<bits/stdc++.h>
using namespace std;
#define int long long
int a[200010], b[200010];
signed main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	int T;
	cin>>T;
	while(T--) {
		int n;
		cin>>n;
		int mx=-1e9, mn=1e9;
		int ans=0;
		for(int i=1;i<=n;i++){
			cin>>a[i];
		} 
		for(int i=1;i<=n;i++){
			cin>>b[i];
			if(a[i]>b[i]) swap(a[i],b[i]);
		} 
		for(int i=1;i<=n;i++) {
			ans+=abs(b[i]-a[i]);
			mx=max(mx,a[i]); mn=min(mn,b[i]);
		}
		if(mx>mn) ans+=2*(mx-mn);
		cout<<ans<<"\n";
	} 
	return 0;
}

posted @ 2024-07-16 21:11  merlinkkk  阅读(48)  评论(0)    收藏  举报