专栏文章

ABC419 C

AT_abc419_c题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@mioaco7p
此快照首次捕获于
2025/12/02 15:57
3 个月前
此快照最后确认于
2025/12/02 15:57
3 个月前
查看原文

简要题意

在一个平面中给你 nn 个点每个点的坐标是 (Ri,Ci)(R_i,C_i) 你需要在平面内找到一个点,使这个点到所有点的切比雪夫距离的最大值最小,请求出这个值。
两点之间的切比雪夫距离定义为 max(xaxb,yayb)\max(|x_a-x_b|,|y_a-y_b|)

分析

我们可以首先考虑一维的问题:在线段上给定 nn 个点,在线段上找一个点,使得这 nn 个点到这个点的距离最大值最小。
显然,这个点应在这给定的最左边那个点和最右边那个点的中点(初一知识)。
那我们就可以推广到二维的情况了,将两个维度拆开,则这时使这个点到所有点的切比雪夫距离的最大值最小的那个点的坐标就是 (Rmin+Rmax2,Cmin+Cmax2)(\frac{R_{min}+R_{max}}{2},\frac{C_{min}+C_{max}}{2})

Code

CPP
#include <iostream>
using namespace std;
int R[200005],C[200005];
int N;
int main() {
    cin>>N;
    for (int i=1;i<=N;++i) {
        cin >> R[i] >> C[i];
    }
    sort(R+1,R+N+1);
    sort(C+1,C+N+1);
    int x_p=(R[1]+R[N])/2;
    int x_dis=max(R[1]-x_p,R[N]-x_p);
    int y_p=(C[1]+C[N])/2;
    int y_dis=max(C[1]-y_p,C[N]-y_p);
    cout<<max(x_dis,y_dis);
    return 0;
}

评论

0 条评论,欢迎与作者交流。

正在加载评论...