106642024-04-07 19:26:54Valaki2Rajzcpp17Elfogadva 100/100384ms22892 KiB
#include <bits/stdc++.h>
using namespace std;

#define int long long
#define pb push_back
#define mp make_pair
#define pii pair<int, int>
#define fi first
#define se second

struct point {
    int x, y;
    int id;
    point() : x(0), y(0), id(-1) {}
    point(int x_, int y_, int id_) :
        x(x_), y(y_), id(id_) {}
};

int sg(int x) {
    if(x < 0) {
        return -1;
    }
    if(x > 0) {
        return 1;
    }
    return 0;
}

int direction(point a, point b, point c) {
    return sg((c.y - a.y) * (b.x - a.x) - (b.y - a.y) * (c.x - a.x));
}

bool between(point a, point b, point c) {
    return c.x >= min(a.x, b.x) && c.x <= max(a.x, b.x) && c.y >= min(a.y, b.y) && c.y <= max(a.y, b.y);
}

bool on_segment(point a, point b, point c) {
    return direction(a, b, c) == 0 && between(a, b, c);
}

bool intersect(point a, point b, point c, point d) {
    return on_segment(a, b, c) || on_segment(a, b, d) || on_segment(c, d, a) || on_segment(c, d, b)
        || (direction(a, b, c) * direction(a, b, d) == -1 && direction(c, d, a) * direction(c, d, b) == -1);
}

const int maxn = 1000;
const int inf = 1e9 + 7;
const point far = point(1, -inf, -1);
const point origin = point(0, 0, -1);

int n;
point points[1 + maxn];
unsigned int dist[1 + maxn][1 + maxn];
bool intersects[1 + maxn][1 + maxn];
int vis[1 + maxn];
unsigned int len;
int cur_comp;

void dfs(int cur) {
    vis[cur] = cur_comp;
    for(int nei = 1; nei <= n; nei++) {
        if(nei == cur || vis[nei] || dist[cur][nei] > len || intersects[cur][nei]) {
            continue;
        }
        dfs(nei);
    }
}

bool good(unsigned int cur_len) {
    len = cur_len;
    cur_comp = 0;
    for(int i = 1; i <= n; i++) {
        vis[i] = false;
    }
    for(int i = 1; i <= n; i++) {
        if(!vis[i]) {
            cur_comp++;
            dfs(i);
        }
    }
    for(int i = 1; i <= n; i++) {
        for(int j = 1; j <= n; j++) {
            if(i != j && vis[i] == vis[j] && dist[i][j] <= len && intersects[i][j]) {
                return true;
            }
        }
    }
    return false;
}

void solve() {
    cin >> n;
    for(int i = 1; i <= n; i++) {
        cin >> points[i].x >> points[i].y;
        points[i].id = i;
    }
    for(int i = 1; i <= n; i++) {
        for(int j = 1; j <= n; j++) {
            dist[i][j] = (points[i].x - points[j].x) * (points[i].x - points[j].x)
                + (points[i].y - points[j].y) * (points[i].y - points[j].y);
            intersects[i][j] = intersect(points[i], points[j], origin, far);
        }
    }
    unsigned int l = 0, r = 8e18 + 1;
    while(l < r - 1) {
        unsigned int mid = (l + r) / 2;
        if(good(mid)) {
            r = mid;
        } else {
            l = mid;
        }
    }
    if(r == 8e18 + 1) {
        cout << "-1\n";
    } else {
        cout << r << "\n";
    }
}

signed main() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    solve();
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva3ms1952 KiB
2Elfogadva3ms2148 KiB
subtask220/20
3Elfogadva3ms2420 KiB
4Elfogadva3ms2632 KiB
5Elfogadva3ms2532 KiB
6Elfogadva3ms2788 KiB
7Elfogadva3ms3000 KiB
8Elfogadva3ms2952 KiB
9Elfogadva3ms2952 KiB
10Elfogadva3ms2956 KiB
11Elfogadva3ms2920 KiB
12Elfogadva3ms3372 KiB
subtask320/20
13Elfogadva3ms2420 KiB
14Elfogadva3ms2632 KiB
15Elfogadva3ms2532 KiB
16Elfogadva3ms2788 KiB
17Elfogadva3ms3000 KiB
18Elfogadva3ms2952 KiB
19Elfogadva3ms2952 KiB
20Elfogadva3ms2956 KiB
21Elfogadva3ms2920 KiB
22Elfogadva3ms3372 KiB
23Elfogadva3ms3492 KiB
24Elfogadva3ms3704 KiB
25Elfogadva3ms3912 KiB
26Elfogadva3ms3892 KiB
27Elfogadva3ms4128 KiB
28Elfogadva3ms4152 KiB
29Elfogadva3ms4236 KiB
30Elfogadva3ms4364 KiB
31Elfogadva3ms4332 KiB
subtask420/20
32Elfogadva3ms2420 KiB
33Elfogadva3ms2632 KiB
34Elfogadva3ms2532 KiB
35Elfogadva3ms2788 KiB
36Elfogadva3ms3000 KiB
37Elfogadva3ms2952 KiB
38Elfogadva3ms2952 KiB
39Elfogadva3ms2956 KiB
40Elfogadva3ms2920 KiB
41Elfogadva3ms3372 KiB
42Elfogadva3ms3492 KiB
43Elfogadva3ms3704 KiB
44Elfogadva3ms3912 KiB
45Elfogadva3ms3892 KiB
46Elfogadva3ms4128 KiB
47Elfogadva3ms4152 KiB
48Elfogadva3ms4236 KiB
49Elfogadva3ms4364 KiB
50Elfogadva3ms4332 KiB
51Elfogadva4ms5404 KiB
52Elfogadva4ms5388 KiB
53Elfogadva4ms5400 KiB
54Elfogadva4ms5520 KiB
55Elfogadva4ms5764 KiB
56Elfogadva7ms5768 KiB
57Elfogadva7ms5768 KiB
58Elfogadva7ms5768 KiB
59Elfogadva6ms5780 KiB
60Elfogadva6ms5776 KiB
61Elfogadva6ms5908 KiB
62Elfogadva6ms5688 KiB
63Elfogadva6ms5916 KiB
64Elfogadva6ms6020 KiB
65Elfogadva6ms5904 KiB
66Elfogadva4ms5884 KiB
67Elfogadva6ms6008 KiB
68Elfogadva6ms6140 KiB
69Elfogadva4ms6196 KiB
70Elfogadva6ms6188 KiB
subtask540/40
71Elfogadva3ms2420 KiB
72Elfogadva3ms2632 KiB
73Elfogadva3ms2532 KiB
74Elfogadva3ms2788 KiB
75Elfogadva3ms3000 KiB
76Elfogadva3ms2952 KiB
77Elfogadva3ms2952 KiB
78Elfogadva3ms2956 KiB
79Elfogadva3ms2920 KiB
80Elfogadva3ms3372 KiB
81Elfogadva3ms3492 KiB
82Elfogadva3ms3704 KiB
83Elfogadva3ms3912 KiB
84Elfogadva3ms3892 KiB
85Elfogadva3ms4128 KiB
86Elfogadva3ms4152 KiB
87Elfogadva3ms4236 KiB
88Elfogadva3ms4364 KiB
89Elfogadva3ms4332 KiB
90Elfogadva4ms5404 KiB
91Elfogadva4ms5388 KiB
92Elfogadva4ms5400 KiB
93Elfogadva4ms5520 KiB
94Elfogadva4ms5764 KiB
95Elfogadva7ms5768 KiB
96Elfogadva7ms5768 KiB
97Elfogadva7ms5768 KiB
98Elfogadva6ms5780 KiB
99Elfogadva6ms5776 KiB
100Elfogadva6ms5908 KiB
101Elfogadva6ms5688 KiB
102Elfogadva6ms5916 KiB
103Elfogadva6ms6020 KiB
104Elfogadva6ms5904 KiB
105Elfogadva4ms5884 KiB
106Elfogadva6ms6008 KiB
107Elfogadva6ms6140 KiB
108Elfogadva4ms6196 KiB
109Elfogadva6ms6188 KiB
110Elfogadva172ms22748 KiB
111Elfogadva177ms22784 KiB
112Elfogadva184ms22780 KiB
113Elfogadva189ms22868 KiB
114Elfogadva180ms22732 KiB
115Elfogadva180ms22712 KiB
116Elfogadva291ms22892 KiB
117Elfogadva333ms22796 KiB
118Elfogadva384ms22804 KiB
119Elfogadva310ms22720 KiB
120Elfogadva337ms22684 KiB
121Elfogadva317ms22720 KiB
122Elfogadva259ms22744 KiB
123Elfogadva266ms22684 KiB
124Elfogadva277ms22716 KiB
125Elfogadva270ms22708 KiB
126Elfogadva277ms22684 KiB
127Elfogadva246ms22716 KiB
128Elfogadva289ms22804 KiB
129Elfogadva222ms22748 KiB
130Elfogadva233ms22748 KiB
131Elfogadva195ms22744 KiB
132Elfogadva194ms22780 KiB