题目链接
题意:给定两个序列
{
a
1
,
a
2
,
…
,
a
n
}
,
{
b
1
,
b
2
,
…
,
b
n
}
\{a_1, a_2, \dots, a_n\},\{b_1, b_2, \dots, b_n\}
{a1,a2,…,an},{b1,b2,…,bn},给定三种操作:
1.
a
i
=
a
i
−
1
a_i=a_i-1
ai=ai−1
2.
b
i
=
b
i
−
1
b_i=b_i-1
bi=bi−1
3.
a
i
=
a
i
−
1
a_i=a_i-1
ai=ai−1
a
n
d
and
and
b
i
=
b
i
−
1
b_i=b_i-1
bi=bi−1
问最少的操作次数使得
a
1
=
a
2
=
⋯
=
a
n
a_1 = a_2 = \dots = a_n
a1=a2=⋯=an且
b
1
=
b
2
=
⋯
=
b
n
b_1 = b_2 = \dots = b_n
b1=b2=⋯=bn
思路:先处理出两个序列中的最小数,累加
m
a
x
(
a
[
i
]
−
m
i
n
a
,
b
[
i
]
−
m
i
n
b
)
max(a[i]-min_a,b[i]-min_b)
max(a[i]−mina,b[i]−minb)即可
AC代码:
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define pb push_back
#define rep(i,a,b) for(int i=a;i<=b;i++)
#define frep(i,a,b) for(int i=a;i>=b;i--)
const int N = 1E6+10;
int n,k,m,a[N],b[N];
int main()
{
//freopen("1.txt","r",stdin);
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
int t; cin>>t;
while(t--)
{
cin>>n;
ll sum=0;
int m1=1000000001,m2=1000000001;
for(int i=1;i<=n;i++) {cin>>a[i];m1=min(a[i],m1);}
for(int i=1;i<=n;i++) {cin>>b[i];m2=min(b[i],m2);}
for(int i=1;i<=n;i++){
sum+=max(a[i]-m1,b[i]-m2);
}
cout<<sum<<endl;
}
return 0;
}