显示原始代码
#include <stdio.h>
#include <math.h>
double calculate_distance(double x, double y, double x1, double y1, double x2, double y2) {
if (x1 <= x && x <= x2 && y1 <= y && y <= y2) {
return 0.0;
} else if (x1 <= x && x <= x2) {
return (y - y1 < y2 - y) ? y - y1 : y2 - y;
} else if (y1 <= y && y <= y2) {
return (x - x1 < x2 - x) ? x - x1 : x2 - x;
} else {
double d1 = sqrt((x - x1) * (x - x1) + (y - y1) * (y - y1));
double d2 = sqrt((x - x2) * (x - x2) + (y - y2) * (y - y2));
double d3 = sqrt((x - x1) * (x - x1) + (y - y2) * (y - y2));
double d4 = sqrt((x - x2) * (x - x2) + (y - y1) * (y - y1));
double min = d1;
if (d2 < min)
min = d2;
if (d3 < min)
min = d3;
if (d4 < min)
min = d4;
return min;
}
}
int main() {
int n;
scanf("%d", &n);
double x1, y1, x2, y2;
scanf("%lf %lf %lf %lf", &x1, &y1, &x2, &y2);
double distances[n];
double min_distance = 1e9;
int min_index = -1;
for (int i = 0; i < n; i++) {
double x, y;
scanf("%lf %lf", &x, &y);
double distance = calculate_distance(x, y, x1, y1, x2, y2);
distances[i] = distance;
if (distance < min_distance) {
min_distance = distance;
min_index = i + 1;
}
}
for (int i = 0; i < n; i++) {
printf("%.9lf ", distances[i]);
}
printf("\n");
printf("%d\n", min_index);
return 0;
}