题意:二维空间,n个点,求以某点为起点到各点的最小切比雪夫距离
分析:
上一道题之前已经用“分治“思想在O(n)的时间内求出了n个点,以某点为起点到各点的最小曼哈顿距离,那么我们根据二维空间切比雪夫距离和曼哈顿距离的关系,可以把切比雪夫距离转化成曼哈顿距离,再直接用之前的方法即可。
二维空间:
曼哈顿距离 :d=|x1-x2|+|y1-y2|,到某点的曼哈顿距离为r的点组成一个边长为√2*r的正方形,且边与坐标轴成45度
切比雪夫距离:d=max(|x1-x2|,|y1-y2|),到某点的切比雪夫距离为r的点组成一个边长为2*r的正方形,且边与坐标轴平行
在二维平面我们可以发现边长为r的切比雪夫正方形旋转45度,就变成了边长为2*r的曼哈顿正方形,旋转公式是:x'=x+y,y'=y-x。所以我们只需在上面一题的代码中加上这个坐标转化,结果输出ans/2就行了
代码:
#include<iostream>
#include<cstring>
#include<algorithm>
#define INF 1000000000000007
using namespace std;
struct node{
long long x,y;
long long sum;
}a[100005];
bool cmp1(node a,node b)
{
return a.x<b.x;
}
bool cmp2(node a,node b)
{
return a.y<b.y;
}
int main(){
int t,n;
cin>>t;
while(t--){
ci