萝卜头IT论坛

搜索
123
返回列表 发新帖
楼主: Liusitong
收起左侧

[水] 这里是正在机房摸鱼的楼主……

[复制链接]
发表于 2023-2-12 19:58:12 | 显示全部楼层
这题不是纯暴力吗(?
回复

使用道具 举报

发表于 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]
回复

使用道具 举报

 楼主| 发表于 2023-2-13 11:47:53 来自手机 | 显示全部楼层
本帖最后由 Liusitong 于 2023-2-13 11:51 编辑
这个显卡不太冷 发表于 2023-2-12 19:59
[md]```cpp
#include
using namespace std;


大佬好厉害……做题还是等退烧之后再说吧,脑子都烧坏了……
对乙酰氨基酚只能降到38.6,没五个小时又升到39.2了,唉。
回复

使用道具 举报

联系我们(Contact)|手机版|萝卜头IT论坛 ( 苏ICP备15050961号-1 )

GMT+8, 2024-5-3 08:16 , Processed in 0.093922 second(s), 16 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表