10664 2024. 04. 07 19:26:54 Valaki2 Rajz cpp17 Elfogadva 100/100 384ms 22892 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 Összpont Teszt Verdikt Idő Memória
subtask1 0/0
1 Elfogadva 3ms 1952 KiB
2 Elfogadva 3ms 2148 KiB
subtask2 20/20
3 Elfogadva 3ms 2420 KiB
4 Elfogadva 3ms 2632 KiB
5 Elfogadva 3ms 2532 KiB
6 Elfogadva 3ms 2788 KiB
7 Elfogadva 3ms 3000 KiB
8 Elfogadva 3ms 2952 KiB
9 Elfogadva 3ms 2952 KiB
10 Elfogadva 3ms 2956 KiB
11 Elfogadva 3ms 2920 KiB
12 Elfogadva 3ms 3372 KiB
subtask3 20/20
13 Elfogadva 3ms 2420 KiB
14 Elfogadva 3ms 2632 KiB
15 Elfogadva 3ms 2532 KiB
16 Elfogadva 3ms 2788 KiB
17 Elfogadva 3ms 3000 KiB
18 Elfogadva 3ms 2952 KiB
19 Elfogadva 3ms 2952 KiB
20 Elfogadva 3ms 2956 KiB
21 Elfogadva 3ms 2920 KiB
22 Elfogadva 3ms 3372 KiB
23 Elfogadva 3ms 3492 KiB
24 Elfogadva 3ms 3704 KiB
25 Elfogadva 3ms 3912 KiB
26 Elfogadva 3ms 3892 KiB
27 Elfogadva 3ms 4128 KiB
28 Elfogadva 3ms 4152 KiB
29 Elfogadva 3ms 4236 KiB
30 Elfogadva 3ms 4364 KiB
31 Elfogadva 3ms 4332 KiB
subtask4 20/20
32 Elfogadva 3ms 2420 KiB
33 Elfogadva 3ms 2632 KiB
34 Elfogadva 3ms 2532 KiB
35 Elfogadva 3ms 2788 KiB
36 Elfogadva 3ms 3000 KiB
37 Elfogadva 3ms 2952 KiB
38 Elfogadva 3ms 2952 KiB
39 Elfogadva 3ms 2956 KiB
40 Elfogadva 3ms 2920 KiB
41 Elfogadva 3ms 3372 KiB
42 Elfogadva 3ms 3492 KiB
43 Elfogadva 3ms 3704 KiB
44 Elfogadva 3ms 3912 KiB
45 Elfogadva 3ms 3892 KiB
46 Elfogadva 3ms 4128 KiB
47 Elfogadva 3ms 4152 KiB
48 Elfogadva 3ms 4236 KiB
49 Elfogadva 3ms 4364 KiB
50 Elfogadva 3ms 4332 KiB
51 Elfogadva 4ms 5404 KiB
52 Elfogadva 4ms 5388 KiB
53 Elfogadva 4ms 5400 KiB
54 Elfogadva 4ms 5520 KiB
55 Elfogadva 4ms 5764 KiB
56 Elfogadva 7ms 5768 KiB
57 Elfogadva 7ms 5768 KiB
58 Elfogadva 7ms 5768 KiB
59 Elfogadva 6ms 5780 KiB
60 Elfogadva 6ms 5776 KiB
61 Elfogadva 6ms 5908 KiB
62 Elfogadva 6ms 5688 KiB
63 Elfogadva 6ms 5916 KiB
64 Elfogadva 6ms 6020 KiB
65 Elfogadva 6ms 5904 KiB
66 Elfogadva 4ms 5884 KiB
67 Elfogadva 6ms 6008 KiB
68 Elfogadva 6ms 6140 KiB
69 Elfogadva 4ms 6196 KiB
70 Elfogadva 6ms 6188 KiB
subtask5 40/40
71 Elfogadva 3ms 2420 KiB
72 Elfogadva 3ms 2632 KiB
73 Elfogadva 3ms 2532 KiB
74 Elfogadva 3ms 2788 KiB
75 Elfogadva 3ms 3000 KiB
76 Elfogadva 3ms 2952 KiB
77 Elfogadva 3ms 2952 KiB
78 Elfogadva 3ms 2956 KiB
79 Elfogadva 3ms 2920 KiB
80 Elfogadva 3ms 3372 KiB
81 Elfogadva 3ms 3492 KiB
82 Elfogadva 3ms 3704 KiB
83 Elfogadva 3ms 3912 KiB
84 Elfogadva 3ms 3892 KiB
85 Elfogadva 3ms 4128 KiB
86 Elfogadva 3ms 4152 KiB
87 Elfogadva 3ms 4236 KiB
88 Elfogadva 3ms 4364 KiB
89 Elfogadva 3ms 4332 KiB
90 Elfogadva 4ms 5404 KiB
91 Elfogadva 4ms 5388 KiB
92 Elfogadva 4ms 5400 KiB
93 Elfogadva 4ms 5520 KiB
94 Elfogadva 4ms 5764 KiB
95 Elfogadva 7ms 5768 KiB
96 Elfogadva 7ms 5768 KiB
97 Elfogadva 7ms 5768 KiB
98 Elfogadva 6ms 5780 KiB
99 Elfogadva 6ms 5776 KiB
100 Elfogadva 6ms 5908 KiB
101 Elfogadva 6ms 5688 KiB
102 Elfogadva 6ms 5916 KiB
103 Elfogadva 6ms 6020 KiB
104 Elfogadva 6ms 5904 KiB
105 Elfogadva 4ms 5884 KiB
106 Elfogadva 6ms 6008 KiB
107 Elfogadva 6ms 6140 KiB
108 Elfogadva 4ms 6196 KiB
109 Elfogadva 6ms 6188 KiB
110 Elfogadva 172ms 22748 KiB
111 Elfogadva 177ms 22784 KiB
112 Elfogadva 184ms 22780 KiB
113 Elfogadva 189ms 22868 KiB
114 Elfogadva 180ms 22732 KiB
115 Elfogadva 180ms 22712 KiB
116 Elfogadva 291ms 22892 KiB
117 Elfogadva 333ms 22796 KiB
118 Elfogadva 384ms 22804 KiB
119 Elfogadva 310ms 22720 KiB
120 Elfogadva 337ms 22684 KiB
121 Elfogadva 317ms 22720 KiB
122 Elfogadva 259ms 22744 KiB
123 Elfogadva 266ms 22684 KiB
124 Elfogadva 277ms 22716 KiB
125 Elfogadva 270ms 22708 KiB
126 Elfogadva 277ms 22684 KiB
127 Elfogadva 246ms 22716 KiB
128 Elfogadva 289ms 22804 KiB
129 Elfogadva 222ms 22748 KiB
130 Elfogadva 233ms 22748 KiB
131 Elfogadva 195ms 22744 KiB
132 Elfogadva 194ms 22780 KiB