5397 2023. 05. 10 18:27:05 mraron Rajz cpp17 Időlimit túllépés 60/100 1.082s 8856 KiB
#include <iostream>
#include <vector>
#include <deque>

using namespace std;

struct point{
    long long x, y;
    point(long long x = 0, long long y = 0) : x(x), y(y) {}
    point operator-() const { return point(-x, -y); }
    point operator+(point p) const { return point(x + p.x, y + p.y); }
    point operator-(point p) const { return (*this) + (-p); }
    long long len() const { return x*x + y*y; }
};

inline long long cross(point a, point b) { return a.x * b.y - b.x * a.y; }

inline int sgn(long long x) { return (x > 0) - (x < 0); }

inline int dir(point a, point b, point c) { return sgn(cross(b-a, c-a)); }

inline bool contains(point a, point b, point c, point d){
    int d1 = dir(a, b, d);
    int d2 = dir(b, c, d);
    int d3 = dir(c, a, d);
    return d1 == d2 && d2 == d3;
}

vector<vector<int>> g;
vector<bool> vis, done;
vector<point> v;

void add_edge(int x, int y){
    if(dir(v[x], v[y], point(0, 0)) > 0) g[x].push_back(y);
    else g[y].push_back(x);
}

bool dfs(int x){
    vis[x] = true;
    for(int y : g[x]){
        if((vis[y] && !done[y]) || (!vis[y] && dfs(y))) return true;
    }
    done[x] = true;
    return false;
}

const long long INF = 8e18 + 1;

int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0);

    int n;
    cin>>n;

    v.resize(n);
    for(auto &[x, y] : v) cin>>x>>y;

    long long lo = 0, hi = INF;
    while(lo + 1 < hi){
        long long mid = lo + (hi - lo) / 2;
        deque<pair<int, int>> q;
        vector<vector<bool>> used(n, vector<bool>(n));
        for(int i = 0; i < n; i++){
            for(int j = i+1; j < n; j++){
                if((v[i]-v[j]).len() <= mid){
                    q.emplace_back(i, j);
                    used[i][j] = used[j][i] = true;
                }
            }
        }
        g.assign(n, vector<int>());
        while (!q.empty()) {
            int x = q.front().first, y = q.front().second;
            q.pop_front();
            add_edge(x, y);
            for(int i = 0; i < n; i++){
                if(i == x || i == y || contains(v[x], v[y], v[i], point(0, 0))) continue;
                if(used[x][i] && !used[y][i]) {
                    q.emplace_back(y, i);
                    used[y][i] = used[i][y] = true;
                }
                if(!used[x][i] && used[y][i]) {
                    q.emplace_back(x, i);
                    used[x][i] = used[i][x] = true;
                }
            }
        }
        vis.assign(n, false);
        done.assign(n, false);
        bool ok = false;
        for(int i = 0; i < n; i++){
            if(!vis[i]){
                ok = ok || dfs(i);
            }
        }
        if(ok) hi = mid;
        else lo = mid;
    }

    if(hi == INF) cout<<-1<<'\n';
    else cout<<hi<<'\n';

    return 0;
}
Részfeladat Összpont Teszt Verdikt Idő Memória
subtask1 0/0
1 Elfogadva 3ms 1828 KiB
2 Elfogadva 3ms 2032 KiB
subtask2 20/20
3 Elfogadva 3ms 2032 KiB
4 Elfogadva 3ms 2260 KiB
5 Elfogadva 3ms 2328 KiB
6 Elfogadva 3ms 2460 KiB
7 Elfogadva 3ms 2672 KiB
8 Elfogadva 3ms 2756 KiB
9 Elfogadva 3ms 2980 KiB
10 Elfogadva 3ms 2988 KiB
11 Elfogadva 3ms 2968 KiB
12 Elfogadva 3ms 2964 KiB
13 Elfogadva 3ms 3096 KiB
subtask3 20/20
14 Elfogadva 3ms 3096 KiB
15 Elfogadva 3ms 2260 KiB
16 Elfogadva 3ms 2328 KiB
17 Elfogadva 3ms 2460 KiB
18 Elfogadva 3ms 2672 KiB
19 Elfogadva 3ms 2756 KiB
20 Elfogadva 3ms 2980 KiB
21 Elfogadva 3ms 2988 KiB
22 Elfogadva 3ms 2968 KiB
23 Elfogadva 3ms 2964 KiB
24 Elfogadva 3ms 3096 KiB
25 Elfogadva 6ms 3308 KiB
26 Elfogadva 6ms 3412 KiB
27 Elfogadva 6ms 3408 KiB
28 Elfogadva 4ms 3488 KiB
29 Elfogadva 6ms 3488 KiB
30 Elfogadva 6ms 3620 KiB
31 Elfogadva 6ms 3712 KiB
32 Elfogadva 6ms 3740 KiB
33 Elfogadva 3ms 3972 KiB
subtask4 20/20
34 Elfogadva 3ms 3972 KiB
35 Elfogadva 3ms 2260 KiB
36 Elfogadva 3ms 2328 KiB
37 Elfogadva 3ms 2460 KiB
38 Elfogadva 3ms 2672 KiB
39 Elfogadva 3ms 2756 KiB
40 Elfogadva 3ms 2980 KiB
41 Elfogadva 3ms 2988 KiB
42 Elfogadva 3ms 2968 KiB
43 Elfogadva 3ms 2964 KiB
44 Elfogadva 3ms 3096 KiB
45 Elfogadva 6ms 3308 KiB
46 Elfogadva 6ms 3412 KiB
47 Elfogadva 6ms 3408 KiB
48 Elfogadva 4ms 3488 KiB
49 Elfogadva 6ms 3488 KiB
50 Elfogadva 6ms 3620 KiB
51 Elfogadva 6ms 3712 KiB
52 Elfogadva 6ms 3740 KiB
53 Elfogadva 3ms 3972 KiB
54 Elfogadva 565ms 4136 KiB
55 Elfogadva 541ms 4136 KiB
56 Elfogadva 559ms 4152 KiB
57 Elfogadva 555ms 4148 KiB
58 Elfogadva 575ms 4124 KiB
59 Elfogadva 504ms 4124 KiB
60 Elfogadva 411ms 4128 KiB
61 Elfogadva 391ms 4276 KiB
62 Elfogadva 486ms 4384 KiB
63 Elfogadva 451ms 4340 KiB
64 Elfogadva 432ms 4336 KiB
65 Elfogadva 453ms 4392 KiB
66 Elfogadva 432ms 4464 KiB
67 Elfogadva 456ms 4624 KiB
68 Elfogadva 465ms 4576 KiB
69 Elfogadva 493ms 4724 KiB
70 Elfogadva 477ms 4616 KiB
71 Elfogadva 476ms 4848 KiB
72 Elfogadva 481ms 4932 KiB
73 Elfogadva 483ms 4840 KiB
subtask5 0/40
74 Elfogadva 483ms 4840 KiB
75 Elfogadva 3ms 2260 KiB
76 Elfogadva 3ms 2328 KiB
77 Elfogadva 3ms 2460 KiB
78 Elfogadva 3ms 2672 KiB
79 Elfogadva 3ms 2756 KiB
80 Elfogadva 3ms 2980 KiB
81 Elfogadva 3ms 2988 KiB
82 Elfogadva 3ms 2968 KiB
83 Elfogadva 3ms 2964 KiB
84 Elfogadva 3ms 3096 KiB
85 Elfogadva 6ms 3308 KiB
86 Elfogadva 6ms 3412 KiB
87 Elfogadva 6ms 3408 KiB
88 Elfogadva 4ms 3488 KiB
89 Elfogadva 6ms 3488 KiB
90 Elfogadva 6ms 3620 KiB
91 Elfogadva 6ms 3712 KiB
92 Elfogadva 6ms 3740 KiB
93 Elfogadva 3ms 3972 KiB
94 Elfogadva 565ms 4136 KiB
95 Elfogadva 541ms 4136 KiB
96 Elfogadva 559ms 4152 KiB
97 Elfogadva 555ms 4148 KiB
98 Elfogadva 575ms 4124 KiB
99 Elfogadva 504ms 4124 KiB
100 Elfogadva 411ms 4128 KiB
101 Elfogadva 391ms 4276 KiB
102 Elfogadva 486ms 4384 KiB
103 Elfogadva 451ms 4340 KiB
104 Elfogadva 432ms 4336 KiB
105 Elfogadva 453ms 4392 KiB
106 Elfogadva 432ms 4464 KiB
107 Elfogadva 456ms 4624 KiB
108 Elfogadva 465ms 4576 KiB
109 Elfogadva 493ms 4724 KiB
110 Elfogadva 477ms 4616 KiB
111 Elfogadva 476ms 4848 KiB
112 Elfogadva 481ms 4932 KiB
113 Elfogadva 483ms 4840 KiB
114 Időlimit túllépés 1.074s 8264 KiB
115 Időlimit túllépés 1.054s 8440 KiB
116 Időlimit túllépés 1.024s 8428 KiB
117 Időlimit túllépés 1.049s 8476 KiB
118 Időlimit túllépés 1.082s 8324 KiB
119 Időlimit túllépés 1.065s 8364 KiB
120 Időlimit túllépés 1.07s 8396 KiB
121 Időlimit túllépés 1.065s 8348 KiB
122 Időlimit túllépés 1.052s 8412 KiB
123 Időlimit túllépés 1.054s 8436 KiB
124 Időlimit túllépés 1.075s 8496 KiB
125 Időlimit túllépés 1.057s 8480 KiB
126 Időlimit túllépés 1.062s 8480 KiB
127 Időlimit túllépés 1.057s 8492 KiB
128 Időlimit túllépés 1.057s 8532 KiB
129 Időlimit túllépés 1.082s 8412 KiB
130 Időlimit túllépés 1.057s 8388 KiB
131 Időlimit túllépés 1.065s 8616 KiB
132 Időlimit túllépés 1.041s 8392 KiB
133 Időlimit túllépés 1.049s 8424 KiB
134 Időlimit túllépés 1.07s 8708 KiB
135 Időlimit túllépés 1.07s 8720 KiB
136 Időlimit túllépés 1.054s 8856 KiB