106612024-04-07 19:21:25Valaki2Rajzcpp17Hibás válasz 0/100345ms21948 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ÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva3ms2076 KiB
2Hibás válasz3ms2396 KiB
subtask20/20
3Hibás válasz3ms2352 KiB
4Elfogadva3ms2612 KiB
5Elfogadva3ms2728 KiB
6Elfogadva3ms2936 KiB
7Hibás válasz3ms3016 KiB
8Hibás válasz3ms3240 KiB
9Elfogadva3ms3256 KiB
10Hibás válasz3ms3204 KiB
11Elfogadva3ms3412 KiB
12Elfogadva3ms3628 KiB
subtask30/20
13Hibás válasz3ms2352 KiB
14Elfogadva3ms2612 KiB
15Elfogadva3ms2728 KiB
16Elfogadva3ms2936 KiB
17Hibás válasz3ms3016 KiB
18Hibás válasz3ms3240 KiB
19Elfogadva3ms3256 KiB
20Hibás válasz3ms3204 KiB
21Elfogadva3ms3412 KiB
22Elfogadva3ms3628 KiB
23Hibás válasz3ms3804 KiB
24Elfogadva3ms3892 KiB
25Hibás válasz3ms3804 KiB
26Hibás válasz3ms3804 KiB
27Elfogadva3ms4076 KiB
28Hibás válasz3ms3924 KiB
29Elfogadva3ms3812 KiB
30Elfogadva3ms3820 KiB
31Elfogadva3ms3612 KiB
subtask40/20
32Hibás válasz3ms2352 KiB
33Elfogadva3ms2612 KiB
34Elfogadva3ms2728 KiB
35Elfogadva3ms2936 KiB
36Hibás válasz3ms3016 KiB
37Hibás válasz3ms3240 KiB
38Elfogadva3ms3256 KiB
39Hibás válasz3ms3204 KiB
40Elfogadva3ms3412 KiB
41Elfogadva3ms3628 KiB
42Hibás válasz3ms3804 KiB
43Elfogadva3ms3892 KiB
44Hibás válasz3ms3804 KiB
45Hibás válasz3ms3804 KiB
46Elfogadva3ms4076 KiB
47Hibás válasz3ms3924 KiB
48Elfogadva3ms3812 KiB
49Elfogadva3ms3820 KiB
50Elfogadva3ms3612 KiB
51Hibás válasz4ms4808 KiB
52Hibás válasz4ms5068 KiB
53Hibás válasz4ms4944 KiB
54Hibás válasz4ms4892 KiB
55Hibás válasz4ms4880 KiB
56Hibás válasz6ms4992 KiB
57Hibás válasz6ms5008 KiB
58Hibás válasz6ms5084 KiB
59Hibás válasz6ms5084 KiB
60Hibás válasz6ms5212 KiB
61Elfogadva6ms5212 KiB
62Hibás válasz6ms5292 KiB
63Hibás válasz6ms5284 KiB
64Hibás válasz6ms5412 KiB
65Hibás válasz6ms5408 KiB
66Elfogadva4ms5304 KiB
67Elfogadva6ms5288 KiB
68Elfogadva6ms5404 KiB
69Elfogadva6ms5404 KiB
70Elfogadva6ms5408 KiB
subtask50/40
71Hibás válasz3ms2352 KiB
72Elfogadva3ms2612 KiB
73Elfogadva3ms2728 KiB
74Elfogadva3ms2936 KiB
75Hibás válasz3ms3016 KiB
76Hibás válasz3ms3240 KiB
77Elfogadva3ms3256 KiB
78Hibás válasz3ms3204 KiB
79Elfogadva3ms3412 KiB
80Elfogadva3ms3628 KiB
81Hibás válasz3ms3804 KiB
82Elfogadva3ms3892 KiB
83Hibás válasz3ms3804 KiB
84Hibás válasz3ms3804 KiB
85Elfogadva3ms4076 KiB
86Hibás válasz3ms3924 KiB
87Elfogadva3ms3812 KiB
88Elfogadva3ms3820 KiB
89Elfogadva3ms3612 KiB
90Hibás válasz4ms4808 KiB
91Hibás válasz4ms5068 KiB
92Hibás válasz4ms4944 KiB
93Hibás válasz4ms4892 KiB
94Hibás válasz4ms4880 KiB
95Hibás válasz6ms4992 KiB
96Hibás válasz6ms5008 KiB
97Hibás válasz6ms5084 KiB
98Hibás válasz6ms5084 KiB
99Hibás válasz6ms5212 KiB
100Elfogadva6ms5212 KiB
101Hibás válasz6ms5292 KiB
102Hibás válasz6ms5284 KiB
103Hibás válasz6ms5412 KiB
104Hibás válasz6ms5408 KiB
105Elfogadva4ms5304 KiB
106Elfogadva6ms5288 KiB
107Elfogadva6ms5404 KiB
108Elfogadva6ms5404 KiB
109Elfogadva6ms5408 KiB
110Hibás válasz173ms21748 KiB
111Hibás válasz164ms21752 KiB
112Hibás válasz163ms21784 KiB
113Hibás válasz168ms21896 KiB
114Hibás válasz177ms21796 KiB
115Hibás válasz172ms21784 KiB
116Hibás válasz261ms21808 KiB
117Hibás válasz284ms21848 KiB
118Hibás válasz345ms21816 KiB
119Hibás válasz287ms21948 KiB
120Hibás válasz293ms21888 KiB
121Hibás válasz282ms21776 KiB
122Hibás válasz250ms21776 KiB
123Hibás válasz252ms21748 KiB
124Hibás válasz247ms21748 KiB
125Hibás válasz240ms21784 KiB
126Hibás válasz303ms21752 KiB
127Elfogadva256ms21748 KiB
128Elfogadva321ms21736 KiB
129Elfogadva204ms21752 KiB
130Elfogadva252ms21744 KiB
131Elfogadva263ms21788 KiB
132Elfogadva266ms21788 KiB