CF1898D Absolute Beauty 题解
思路
容易发现,如果 则将 和 交换。
在数轴上标出要交换的四个数的位置若线段 和 线段 互不相交,此时交换比两条线段处于其他位置时更优。
具体证明这里就不再赘述,其他题解讲的已经很清楚了。
所以只需交换最大的 和最小的 即可。
代码
#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; }
本文作者:merlinkkk
本文链接:https://www.cnblogs.com/merlinkkk/p/18306131
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步