|
发表于 2023-2-12 19:59:23
|
显示全部楼层
本帖最后由 这个显卡不太冷 于 2023-2-12 20:05 编辑
[md]```cpp
#include<bits/stdc++.h>
using namespace std;
struct Point {
int x, y;
int dis1, dis2;
Point(int x, int y): x(x), y(y) {}
Point() {}
};
int main() {
Point m1(1, 2), m2(1, 2);
cin >> m1.x >> m1.y >> m2.x >> m2.y;
int n; cin >> n;
vector<Point> p(n);
for (int i = 0; i < n; i++) {
cin >> p.x >> p.y;
p.dis1 = abs(p.x - m1.x) * abs(p.x - m1.x)
+ abs(p.y - m1.y) * abs(p.y - m1.y);
p.dis2 = abs(p.x - m2.x) * abs(p.x - m2.x)
+ abs(p.y - m2.y) * abs(p.y - m2.y);
}
sort(p.begin(), p.end(), [](Point a, Point b) {
return a.dis1 < b.dis1;
});
int ans = p[n - 1].dis1;
//debug
// for (int i = 0; i < n; i++) {
// cout << p.x << ' ' << p.y << ' ' << p.dis1 << ' ' << p.dis2 << endl;
// }
vector<int> surfixMax(n);
surfixMax[n - 1] = p[n - 1].dis2;
for (int i = n - 2; i >= 0; i--) {
surfixMax = max(surfixMax[i + 1], p.dis2);
}
for (int i = 0; i < n - 1; i++) {
ans = min(ans, p.dis1 + surfixMax[i + 1]);
}
cout << ans << endl;
}
```
从小到大遍历MissileA的所有半径,后缀Max一下B的最大半径,加起来。所有可能性取最小不就好了
[/md] |
|