传送门biu~
把曼哈顿距离用公式:
||x1−x2|+|y1−y2|=max{|(x1+y1)−(x2+y2)|,|(x1−y1)−(x2−y2)|}
|
|
x
1
−
x
2
|
+
|
y
1
−
y
2
|
=
max
{
|
(
x
1
+
y
1
)
−
(
x
2
+
y
2
)
|
,
|
(
x
1
−
y
1
)
−
(
x
2
−
y
2
)
|
}
转化为切比雪夫距离。
把每个点(x,y)转化为(x+y,x-y),求切比雪夫距离的最大值
(即
max(max{xi}−min{xi},max{yi}−min{yi})
max
(
max
{
x
i
}
−
min
{
x
i
}
,
max
{
y
i
}
−
min
{
y
i
}
)
)即可。
#include<bits/stdc++.h>
using namespace std;
const int inf=1e9;
int n,MinX=inf,MaxX=-inf,MinY=inf,MaxY=-inf;
int main(){
scanf("%d",&n);
for(int i=1;i<=n;++i){
int x,y;
scanf("%d%d",&x,&y);
int nx=x+y,ny=x-y;
MaxX=max(MaxX,nx),MinX=min(MinX,nx);
MaxY=max(MaxY,ny),MinY=min(MinY,ny);
}
printf("%d",max(MaxX-MinX,MaxY-MinY));
return 0;
}