10661 2024. 04. 07 19:21:25 Valaki2 Rajz cpp17 Hibás válasz 0/100 345ms 21948 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] && 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 2076 KiB
2 Hibás válasz 3ms 2396 KiB
subtask2 0/20
3 Hibás válasz 3ms 2352 KiB
4 Elfogadva 3ms 2612 KiB
5 Elfogadva 3ms 2728 KiB
6 Elfogadva 3ms 2936 KiB
7 Hibás válasz 3ms 3016 KiB
8 Hibás válasz 3ms 3240 KiB
9 Elfogadva 3ms 3256 KiB
10 Hibás válasz 3ms 3204 KiB
11 Elfogadva 3ms 3412 KiB
12 Elfogadva 3ms 3628 KiB
subtask3 0/20
13 Hibás válasz 3ms 2352 KiB
14 Elfogadva 3ms 2612 KiB
15 Elfogadva 3ms 2728 KiB
16 Elfogadva 3ms 2936 KiB
17 Hibás válasz 3ms 3016 KiB
18 Hibás válasz 3ms 3240 KiB
19 Elfogadva 3ms 3256 KiB
20 Hibás válasz 3ms 3204 KiB
21 Elfogadva 3ms 3412 KiB
22 Elfogadva 3ms 3628 KiB
23 Hibás válasz 3ms 3804 KiB
24 Elfogadva 3ms 3892 KiB
25 Hibás válasz 3ms 3804 KiB
26 Hibás válasz 3ms 3804 KiB
27 Elfogadva 3ms 4076 KiB
28 Hibás válasz 3ms 3924 KiB
29 Elfogadva 3ms 3812 KiB
30 Elfogadva 3ms 3820 KiB
31 Elfogadva 3ms 3612 KiB
subtask4 0/20
32 Hibás válasz 3ms 2352 KiB
33 Elfogadva 3ms 2612 KiB
34 Elfogadva 3ms 2728 KiB
35 Elfogadva 3ms 2936 KiB
36 Hibás válasz 3ms 3016 KiB
37 Hibás válasz 3ms 3240 KiB
38 Elfogadva 3ms 3256 KiB
39 Hibás válasz 3ms 3204 KiB
40 Elfogadva 3ms 3412 KiB
41 Elfogadva 3ms 3628 KiB
42 Hibás válasz 3ms 3804 KiB
43 Elfogadva 3ms 3892 KiB
44 Hibás válasz 3ms 3804 KiB
45 Hibás válasz 3ms 3804 KiB
46 Elfogadva 3ms 4076 KiB
47 Hibás válasz 3ms 3924 KiB
48 Elfogadva 3ms 3812 KiB
49 Elfogadva 3ms 3820 KiB
50 Elfogadva 3ms 3612 KiB
51 Hibás válasz 4ms 4808 KiB
52 Hibás válasz 4ms 5068 KiB
53 Hibás válasz 4ms 4944 KiB
54 Hibás válasz 4ms 4892 KiB
55 Hibás válasz 4ms 4880 KiB
56 Hibás válasz 6ms 4992 KiB
57 Hibás válasz 6ms 5008 KiB
58 Hibás válasz 6ms 5084 KiB
59 Hibás válasz 6ms 5084 KiB
60 Hibás válasz 6ms 5212 KiB
61 Elfogadva 6ms 5212 KiB
62 Hibás válasz 6ms 5292 KiB
63 Hibás válasz 6ms 5284 KiB
64 Hibás válasz 6ms 5412 KiB
65 Hibás válasz 6ms 5408 KiB
66 Elfogadva 4ms 5304 KiB
67 Elfogadva 6ms 5288 KiB
68 Elfogadva 6ms 5404 KiB
69 Elfogadva 6ms 5404 KiB
70 Elfogadva 6ms 5408 KiB
subtask5 0/40
71 Hibás válasz 3ms 2352 KiB
72 Elfogadva 3ms 2612 KiB
73 Elfogadva 3ms 2728 KiB
74 Elfogadva 3ms 2936 KiB
75 Hibás válasz 3ms 3016 KiB
76 Hibás válasz 3ms 3240 KiB
77 Elfogadva 3ms 3256 KiB
78 Hibás válasz 3ms 3204 KiB
79 Elfogadva 3ms 3412 KiB
80 Elfogadva 3ms 3628 KiB
81 Hibás válasz 3ms 3804 KiB
82 Elfogadva 3ms 3892 KiB
83 Hibás válasz 3ms 3804 KiB
84 Hibás válasz 3ms 3804 KiB
85 Elfogadva 3ms 4076 KiB
86 Hibás válasz 3ms 3924 KiB
87 Elfogadva 3ms 3812 KiB
88 Elfogadva 3ms 3820 KiB
89 Elfogadva 3ms 3612 KiB
90 Hibás válasz 4ms 4808 KiB
91 Hibás válasz 4ms 5068 KiB
92 Hibás válasz 4ms 4944 KiB
93 Hibás válasz 4ms 4892 KiB
94 Hibás válasz 4ms 4880 KiB
95 Hibás válasz 6ms 4992 KiB
96 Hibás válasz 6ms 5008 KiB
97 Hibás válasz 6ms 5084 KiB
98 Hibás válasz 6ms 5084 KiB
99 Hibás válasz 6ms 5212 KiB
100 Elfogadva 6ms 5212 KiB
101 Hibás válasz 6ms 5292 KiB
102 Hibás válasz 6ms 5284 KiB
103 Hibás válasz 6ms 5412 KiB
104 Hibás válasz 6ms 5408 KiB
105 Elfogadva 4ms 5304 KiB
106 Elfogadva 6ms 5288 KiB
107 Elfogadva 6ms 5404 KiB
108 Elfogadva 6ms 5404 KiB
109 Elfogadva 6ms 5408 KiB
110 Hibás válasz 173ms 21748 KiB
111 Hibás válasz 164ms 21752 KiB
112 Hibás válasz 163ms 21784 KiB
113 Hibás válasz 168ms 21896 KiB
114 Hibás válasz 177ms 21796 KiB
115 Hibás válasz 172ms 21784 KiB
116 Hibás válasz 261ms 21808 KiB
117 Hibás válasz 284ms 21848 KiB
118 Hibás válasz 345ms 21816 KiB
119 Hibás válasz 287ms 21948 KiB
120 Hibás válasz 293ms 21888 KiB
121 Hibás válasz 282ms 21776 KiB
122 Hibás válasz 250ms 21776 KiB
123 Hibás válasz 252ms 21748 KiB
124 Hibás válasz 247ms 21748 KiB
125 Hibás válasz 240ms 21784 KiB
126 Hibás válasz 303ms 21752 KiB
127 Elfogadva 256ms 21748 KiB
128 Elfogadva 321ms 21736 KiB
129 Elfogadva 204ms 21752 KiB
130 Elfogadva 252ms 21744 KiB
131 Elfogadva 263ms 21788 KiB
132 Elfogadva 266ms 21788 KiB