洛谷-P1257 平面上的最接近点对

洛谷-P1257 平面上的最接近点对

原题链接:https://www.luogu.com.cn/problem/P1257


题目描述

给定平面上 \(n\) 个点,找出其中的一对点的距离,使得在这 \(n\) 个点的所有点对中,该距离为所有点对中最小的。

输入格式

第一行一个整数 \(n\),表示点的个数。

接下来 \(n\) 行,每行两个实数 \(x,y\) ,表示一个点的行坐标和列坐标。

输出格式

仅一行,一个实数,表示最短距离,四舍五入保留 \(4\) 位小数。

输入输出样例

输入 #1

3
1 1
1 2
2 2

输出 #1

1.0000

说明/提示

数据规模与约定

对于 \(100\%\) 的数据,保证 \(1 \leq n \leq 10^4\)\(0 \leq x, y \leq 10^9\),小数点后的数字个数不超过 \(6\)

C++代码

#include <cstdio>
#include <cmath>
using namespace std;

int main() {
    int n;
    scanf("%d", &n);
    double x[n], y[n], d, ans=2000000000;
    for (int i=0; i<n; ++i)
        scanf("%lf%lf", &x[i], &y[i]);
    for (int i=0; i<n; ++i)
        for (int j=i+1; j<n; ++j) {
            d = sqrt(pow(x[i]-x[j], 2) + pow(y[i] - y[j], 2));
            if (d < ans)
                ans = d;
        }
    printf("%.4lf\n", ans);
    return 0;
}
posted @ 2021-01-06 20:59  yuzec  阅读(202)  评论(0编辑  收藏  举报