#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
int n;
struct info {
int d1, d2, maxx;
}a[N];
bool cmp(info i, info j) {
return i.d1 < j.d1;
}
int main() {
int x1, y1, x2, y2;
cin >> x1 >> y1 >> x2 >> y2 >> n;
for (int i = 1; i <= n; i ++) {
int x, y;
cin >> x >> y;
a[i].d1 = (x - x1) * (x - x1) + (y - y1) * (y - y1);
a[i].d2 = (x - x2) * (x - x2) + (y - y2) * (y - y2);
}
sort(a + 1, a + 1 + n, cmp);
for (int i = n; i >= 1; i --) {
//第i~第n颗导弹到系统2的最大距离
a[i].maxx = max(a[i].d2, a[i + 1].maxx);
}
int minn = a[1].maxx; //初始值:系统2拦截所有导弹
for (int i = 1; i <= n; i ++) {
//系统1拦截离自己最近的i颗导弹,系统2拦截第i+1 ~ 第n颗导弹
minn = min(minn, a[i].d1 + a[i + 1].maxx);
}
cout << minn;
return 0;
}
NOIP 2010 普及组 导弹拦截
于 2022-03-21 17:11:39 首次发布