1 条题解

  • 0
    @ 2025-4-11 22:45:16

    拯救小云公主

    #include <bits/stdc++.h>
    using namespace std;
    int n, U, D, L, R;
    double row, line;
    double dis[3005][3005];
    double x[3005], y[3005];
    int fa[3015];
    int findFa(int x)
    {
        if (fa[x] == x)
            return x;
        return fa[x] = findFa(fa[x]);
    }
    bool check(double r)
    {
        for (int i = 1; i <= n + 4; i++)
            fa[i] = i;
        // 与四条边
        for (int i = 1; i <= n; i++)
        {
            if (x[i] - 1 <= r)
                fa[findFa(D)] = findFa(i);
            if (row - x[i] <= r)
                fa[findFa(U)] = findFa(i);
            if (y[i] - 1 <= r)
                fa[findFa(L)] = findFa(i);
            if (line - y[i] <= r)
                fa[findFa(R)] = findFa(i);
        }
        // BOSS 之间
        for (int i = 1; i <= n; i++)
        {
            for (int j = i + 1; j <= n; j++)
            {
                if (dis[i][j] <= (r * 2))
                    fa[findFa(i)] = findFa(j);
            }
        }
        // 返回结果
        if ((findFa(U) == findFa(D)) ||
            (findFa(L) == findFa(R)) ||
            (findFa(L) == findFa(D)) ||
            (findFa(U) == findFa(R)))
            return false;
        return true;
    }
    int main()
    {
        cin >> n >> row >> line;
        for (int i = 1; i <= n; i++)
            cin >> x[i] >> y[i];
        U = n + 1, D = n + 2, L = n + 3, R = n + 4;
        // 预处理距离,避免tle
        for (int i = 1; i <= n; i++)
        {
            for (int j = i + 1; j <= n; j++)
            {
                dis[i][j] = sqrt((x[i] - x[j]) * (x[i] - x[j]) + (y[i] - y[j]) * (y[i] - y[j]));
            }
        }
        double l = 0;
        double r = 1e6;
        while ((r - l) > 1e-6)
        {
            double mid = (l + r) / 2;
            if (check(mid))
                l = mid;
            else
                r = mid;
        }
        cout << fixed << setprecision(2) << l << "\n";
        return 0;
    }
    
    • 1

    信息

    ID
    3314
    时间
    1000ms
    内存
    125MiB
    难度
    4
    标签
    递交数
    0
    已通过
    0
    上传者