显示原始代码
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int SIZE = 1e5 + 3;
int n;
struct CAR {
double x, y;
} car[SIZE];
double cal(CAR a, double x, double y) { return sqrt(pow(a.x - x, 2) + pow(a.y - y, 2)); }
int main() {
double x1, y1, x2, y2;
cin >> n;
cin >> x1 >> y1 >> x2 >> y2;
for (int i = 1; i <= n; i++) {
cin >> car[i].x >> car[i].y;
}
double ans = 1e9;
int ord = 0;
for (int i = 1; i <= n; i++) {
double len;
if (car[i].x >= x1 && car[i].x <= x2 && car[i].y <= y2 && car[i].y >= y1) {
ans = 0;
printf("%f.9f ", ans);
continue;
}
if (car[i].x < x1) {
if (car[i].y <= y2 && car[i].y >= y1) {
double len = x1 - car[i].x;
if (ans > len) {
ans = len;
ord = i;
}
printf("%.9f ", x1 - car[i].x);
continue;
} else if (car[i].y < y1) {
double len = cal(car[i], x1, y1);
if (ans > len) {
ans = len;
ord = i;
}
printf("%.9f ", len);
continue;
} else if (car[i].y > y2) {
double len = cal(car[i], x1, y2);
printf("%.9f ", len);
if (ans > len) {
ans = len;
ord = i;
}
continue;
}
} else if (car[i].x >= x1 && car[i].x <= x2) {
if (car[i].y > y2) {
double len = car[i].y - y2;
if (ans > len) {
ans = len;
ord = i;
}
printf("%.9f ", len);
continue;
} else {
double len = y1 - car[i].y;
if (ans > len) {
ans = len;
ord = i;
}
printf("%.9f ", len);
continue;
}
} else if (car[i].x > x2) {
if (car[i].y > y2) {
double len = cal(car[i], x2, y2);
if (ans > len) {
ans = len;
ord = i;
}
printf("%.9f ", len);
continue;
} else if (car[i].y <= y2 && car[i].y >= y1) {
double len = car[i].x - x2;
if (ans > len) {
ans = len;
ord = i;
}
printf("%.9f ", len);
continue;
} else {
double len = cal(car[i], x2, y1);
if (ans > len) {
ans = len;
ord = i;
}
printf("%.9f ", len);
continue;
}
}
}
cout << endl;
cout << ord << endl;
return 0;
}