【问题描述】某市有n个医院,编号1~n,其中第i个医院的位置可以表示为一个平面整数坐标(x,y)。为了方便预约挂号就医,请根据市民位置(X,Y),查询据其最近的三个医院,如果多个医院距离相同,编号较小的视为最近。 【输入形式】输入n+1行,第一行包含用空格分开的三个整数n、X和Y,分别表示医院数量和市民所在位置。第二行到第n+1行输入n个医院的坐标x和y。 【输出形式】输出共3行,按照距离由近到远,一次输出距离该市民最近的三个医院编号。编写一个c语言代码
时间: 2024-02-15 22:05:04 浏览: 91
将一个整数S随机拆分为N个在min~max之间的整数.txt
以下是一个C++代码实现:
```c++
#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;
const int maxn = 100010;
struct point {
int x, y, id;
double dist;
} p[maxn];
bool cmp(const point& a, const point& b) {
if (a.dist != b.dist)
return a.dist < b.dist;
else
return a.id < b.id;
}
int main() {
int n, X, Y;
cin >> n >> X >> Y;
for (int i = 1; i <= n; i++) {
cin >> p[i].x >> p[i].y;
p[i].id = i;
p[i].dist = sqrt((p[i].x - X) * (p[i].x - X) + (p[i].y - Y) * (p[i].y - Y));
}
sort(p + 1, p + n + 1, cmp);
for (int i = 1; i <= 3; i++) {
cout << p[i].id << endl;
}
return 0;
}
```
算法思路:
首先读入市民的位置,然后读入所有医院的位置,同时计算出每个医院到市民的距离,并将医院结构体数组按照距离从小到大排序,如果距离相同,按照编号从小到大排序。最后输出前三个医院的编号即可。
阅读全文