CF gym 103855 M
A
(
x
1
,
y
1
)
A(x1,y1)
A(x1,y1)和
B
(
x
2
,
y
2
)
B(x2,y2)
B(x2,y2)的切比雪夫距离为:
m
a
x
(
∣
x
1
−
x
2
∣
,
∣
y
1
−
y
2
∣
)
max(|x1-x2|,|y1-y2|)
max(∣x1−x2∣,∣y1−y2∣)
结论:
m
a
x
(
∣
x
1
−
x
2
∣
,
∣
y
1
−
y
2
∣
)
=
∣
x
1
+
y
1
−
x
2
−
y
2
∣
+
∣
x
1
−
y
1
−
x
2
+
y
2
∣
2
max(|x1-x2|,|y1-y2|)={ |x1+y1-x2-y2|+|x1-y1-x2+y2| \over 2}
max(∣x1−x2∣,∣y1−y2∣)=2∣x1+y1−x2−y2∣+∣x1−y1−x2+y2∣
m
a
x
(
∣
a
∣
,
∣
b
∣
)
=
∣
a
+
b
∣
+
∣
a
−
b
∣
2
max(|a|,|b|)={ |a+b|+|a-b| \over 2}
max(∣a∣,∣b∣)=2∣a+b∣+∣a−b∣
m
i
n
(
∣
p
i
−
p
j
∣
,
∣
q
i
−
q
j
∣
)
=
∣
p
i
−
p
j
∣
+
∣
q
i
−
q
j
∣
−
m
a
x
(
∣
p
i
−
p
j
∣
,
∣
q
i
−
q
j
∣
)
min(|p_i-p_j|,|q_i-q_j|)=|p_i-p_j|+|q_i-q_j|-max(|p_i-p_j|,|q_i-q_j|)
min(∣pi−pj∣,∣qi−qj∣)=∣pi−pj∣+∣qi−qj∣−max(∣pi−pj∣,∣qi−qj∣)
对于
m
a
x
(
∣
p
i
−
p
j
∣
,
∣
q
i
−
q
j
∣
)
=
∣
p
i
−
p
j
+
q
i
−
q
j
∣
+
∣
p
i
−
p
j
−
q
i
−
q
j
∣
2
max(|p_i-p_j|,|q_i-q_j|)={ |p_i-p_j+q_i-q_j|+|p_i-p_j-q_i-q_j| \over 2}
max(∣pi−pj∣,∣qi−qj∣)=2∣pi−pj+qi−qj∣+∣pi−pj−qi−qj∣
接下来研究
∑
i
=
1
n
∑
j
=
1
n
∣
a
i
−
a
j
∣
\sum_{i=1}^n \sum_{j=1}^n |a_i-a_j|
∑i=1n∑j=1n∣ai−aj∣
对
a
i
a_i
ai 排序后,计算一个
a
i
a_i
ai的贡献可得:
∑
i
=
1
n
∑
j
=
1
n
∣
a
i
−
a
j
∣
=
2
∑
i
=
1
n
a
i
(
2
i
−
n
−
1
)
\sum_{i=1}^n \sum_{j=1}^n |a_i-a_j|=2\sum_{i=1}^{n} a_i(2i-n-1)
∑i=1n∑j=1n∣ai−aj∣=2∑i=1nai(2i−n−1)
那么总问题转换为求:
∑
i
=
1
n
∑
j
=
1
n
∣
p
i
−
p
j
∣
+
∣
q
i
−
q
j
∣
−
∣
p
i
−
p
j
+
q
i
−
q
j
∣
+
∣
p
i
−
p
j
−
q
i
−
q
j
∣
2
\sum_{i=1}^n \sum_{j=1}^n |p_i-p_j|+|q_i-q_j|-{ |p_i-p_j+q_i-q_j|+|p_i-p_j-q_i-q_j| \over 2}
i=1∑nj=1∑n∣pi−pj∣+∣qi−qj∣−2∣pi−pj+qi−qj∣+∣pi−pj−qi−qj∣
即
∑
i
=
1
n
(
2
i
−
n
−
1
)
(
2
p
i
+
2
p
j
−
(
p
i
+
q
i
)
−
(
p
i
−
q
i
)
)
\sum_{i=1}^n (2i-n-1)(2p_i+2p_j-(p_i+q_i)-(p_i-q_i))
i=1∑n(2i−n−1)(2pi+2pj−(pi+qi)−(pi−qi))
#include <bits/stdc++.h>
#define int long long
#define ull unsigned long long
void yrzr(){
int n;
std::cin>>n;
std::vector<int> p(n+1),q(n+1),a(n+1),b(n+1);
for (int i=1;i<=n;i++){
std::cin>>p[i];
}
for (int i=1;i<=n;i++){
std::cin>>q[i];
a[i]=p[i]+q[i];
b[i]=p[i]-q[i];
}
std::sort(p.begin()+1,p.end());
std::sort(a.begin()+1,a.end());
std::sort(b.begin()+1,b.end());
std::sort(q.begin()+1,q.end());
int ans=0;
for (int i=1;i<=n;i++){
ans+=(2*p[i]+2*q[i]-a[i]-b[i])*(2*i-n-1);
}
std::cout<<ans;
}
signed main(){
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
std::cout.tie(nullptr);
int T=1;
// std::cin>>T;
while (T--){
yrzr();
}
return 0;
}