显示原始代码
#include <bits/stdc++.h>
#define ll long long
using namespace std;
double euclideanDistance(int x1, int y1, int x2, int y2) {
return sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
}
double pointToRectangleDistance(int x, int y, int x1, int y1, int x2, int y2) {
if (x >= x1 && x <= x2 && y >= y1 && y <= y2) {
return 0; }
if (x >= x1 && x <= x2) {
return min(abs(y - y1), abs(y - y2)); }
if (y >= y1 && y <= y2) {
return min(abs(x - x1), abs(x - x2)); }
double d1 = euclideanDistance(x, y, x1, y1);
double d2 = euclideanDistance(x, y, x1, y2);
double d3 = euclideanDistance(x, y, x2, y1);
double d4 = euclideanDistance(x, y, x2, y2);
return min(d1, min(d2, min(d3, d4)));
}
int main() {
int n;
cin >> n;
int x1, y1, x2, y2;
cin >> x1 >> y1 >> x2 >> y2;
vector<pair<int, int> > miners(n);
for (int i = 0; i < n; ++i) {
cin >> miners[i].first >> miners[i].second;
}
vector<double> distances(n);
double minDistance = numeric_limits<double>::max();
int minIndex = -1;
for (int i = 0; i < n; ++i) {
distances[i] = pointToRectangleDistance(miners[i].first, miners[i].second, x1, y1, x2, y2);
if (distances[i] < minDistance) {
minDistance = distances[i];
minIndex = i;
}
}
for (int i = 0; i < n; ++i) {
cout << fixed << setprecision(9) << distances[i] << " ";
}
cout << endl;
cout << minIndex + 1 << endl;
return 0;
}