CF1661A Array Balancing
题意
给出两个 个数的数组 ,你可以交换任意的 和 ,求 的最小值。
分析
分别考虑每一个 ,可以发现不管 的值如何改变, 都能通过交换位置或不换位置达到可能的两种取值 或 ,所以对两种情况取最小值再求和即可。
代码
#include<bits/stdc++.h>
#define ll long long
using namespace std;
long long read(){
long long x=0,f=1;char ch=getchar();
while(!isdigit(ch)){if(ch=='-') f=-1;ch=getchar();}
while(isdigit(ch)){x=x*10+ch-48;ch=getchar();}
return x*f;
}
void write(long long x){
if(x<0) putchar('-'),x=-x;
if(x>9) write(x/10);
putchar(x%10+'0');
}
const int N=30;
int t,n;
ll sum,a[N],b[N];
int main(){
t=read();
while(t--){
n=read();
sum=0;
for(int i=1;i<=n;i++)
a[i]=read();
for(int i=1;i<=n;i++)
b[i]=read();
for(int i=1;i<n;i++)
sum+=min(abs(a[i]-a[i+1])+abs(b[i]-b[i+1]),abs(a[i]-b[i+1])+abs(b[i]-a[i+1]));
write(sum);
puts("");
}
return 0;
}

浙公网安备 33010602011771号