显示原始代码
#include <iostream>
#include <vector>
#include <cmath>
#include <cstdio>
using namespace std;
double calculateDistance(double x1, double y1, double x2, double y2) {
return sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
}
double calculateMinDistance(int x, int y, int X1, int Y1, int X2, int Y2) {
if (x >= X1 && x <= X2 && y >= Y1 && y <= Y2) {
return 0.0;
}
double minDist = INFINITY;
if (x < X1) {
minDist = min(minDist, calculateDistance(x, y, X1, max(Y1, min(y, Y2))));
} else if (x > X2) {
minDist = min(minDist, calculateDistance(x, y, X2, max(Y1, min(y, Y2))));
}
if (y < Y1) {
minDist = min(minDist, calculateDistance(x, y, max(X1, min(x, X2)), Y1));
} else if (y > Y2) {
minDist = min(minDist, calculateDistance(x, y, max(X1, min(x, X2)), Y2));
}
return minDist;
}
int main() {
int n;
cin >> n;
int X1, Y1, X2, Y2;
cin >> X1 >> Y1 >> X2 >> Y2;
vector<pair<int, int>> carts(n);
for (int i = 0; i < n; ++i) {
cin >> carts[i].first >> carts[i].second;
}
vector<double> distances(n);
for (int i = 0; i < n; ++i) {
distances[i] = calculateMinDistance(carts[i].first, carts[i].second, X1, Y1, X2, Y2);
}
double minDistance = distances[0];
int minIndex = 0;
for (int i = 1; i < n; ++i) {
if (distances[i] < minDistance) {
minDistance = distances[i];
minIndex = i;
}
}
for (double distance : distances) {
printf("%.9f ", distance);
}
cout << endl;
cout << minIndex + 1 << endl;
return 0;
}