53972023-05-10 18:27:05mraronRajzcpp17Időlimit túllépés 60/1001.082s8856 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ÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva3ms1828 KiB
2Elfogadva3ms2032 KiB
subtask220/20
3Elfogadva3ms2032 KiB
4Elfogadva3ms2260 KiB
5Elfogadva3ms2328 KiB
6Elfogadva3ms2460 KiB
7Elfogadva3ms2672 KiB
8Elfogadva3ms2756 KiB
9Elfogadva3ms2980 KiB
10Elfogadva3ms2988 KiB
11Elfogadva3ms2968 KiB
12Elfogadva3ms2964 KiB
13Elfogadva3ms3096 KiB
subtask320/20
14Elfogadva3ms3096 KiB
15Elfogadva3ms2260 KiB
16Elfogadva3ms2328 KiB
17Elfogadva3ms2460 KiB
18Elfogadva3ms2672 KiB
19Elfogadva3ms2756 KiB
20Elfogadva3ms2980 KiB
21Elfogadva3ms2988 KiB
22Elfogadva3ms2968 KiB
23Elfogadva3ms2964 KiB
24Elfogadva3ms3096 KiB
25Elfogadva6ms3308 KiB
26Elfogadva6ms3412 KiB
27Elfogadva6ms3408 KiB
28Elfogadva4ms3488 KiB
29Elfogadva6ms3488 KiB
30Elfogadva6ms3620 KiB
31Elfogadva6ms3712 KiB
32Elfogadva6ms3740 KiB
33Elfogadva3ms3972 KiB
subtask420/20
34Elfogadva3ms3972 KiB
35Elfogadva3ms2260 KiB
36Elfogadva3ms2328 KiB
37Elfogadva3ms2460 KiB
38Elfogadva3ms2672 KiB
39Elfogadva3ms2756 KiB
40Elfogadva3ms2980 KiB
41Elfogadva3ms2988 KiB
42Elfogadva3ms2968 KiB
43Elfogadva3ms2964 KiB
44Elfogadva3ms3096 KiB
45Elfogadva6ms3308 KiB
46Elfogadva6ms3412 KiB
47Elfogadva6ms3408 KiB
48Elfogadva4ms3488 KiB
49Elfogadva6ms3488 KiB
50Elfogadva6ms3620 KiB
51Elfogadva6ms3712 KiB
52Elfogadva6ms3740 KiB
53Elfogadva3ms3972 KiB
54Elfogadva565ms4136 KiB
55Elfogadva541ms4136 KiB
56Elfogadva559ms4152 KiB
57Elfogadva555ms4148 KiB
58Elfogadva575ms4124 KiB
59Elfogadva504ms4124 KiB
60Elfogadva411ms4128 KiB
61Elfogadva391ms4276 KiB
62Elfogadva486ms4384 KiB
63Elfogadva451ms4340 KiB
64Elfogadva432ms4336 KiB
65Elfogadva453ms4392 KiB
66Elfogadva432ms4464 KiB
67Elfogadva456ms4624 KiB
68Elfogadva465ms4576 KiB
69Elfogadva493ms4724 KiB
70Elfogadva477ms4616 KiB
71Elfogadva476ms4848 KiB
72Elfogadva481ms4932 KiB
73Elfogadva483ms4840 KiB
subtask50/40
74Elfogadva483ms4840 KiB
75Elfogadva3ms2260 KiB
76Elfogadva3ms2328 KiB
77Elfogadva3ms2460 KiB
78Elfogadva3ms2672 KiB
79Elfogadva3ms2756 KiB
80Elfogadva3ms2980 KiB
81Elfogadva3ms2988 KiB
82Elfogadva3ms2968 KiB
83Elfogadva3ms2964 KiB
84Elfogadva3ms3096 KiB
85Elfogadva6ms3308 KiB
86Elfogadva6ms3412 KiB
87Elfogadva6ms3408 KiB
88Elfogadva4ms3488 KiB
89Elfogadva6ms3488 KiB
90Elfogadva6ms3620 KiB
91Elfogadva6ms3712 KiB
92Elfogadva6ms3740 KiB
93Elfogadva3ms3972 KiB
94Elfogadva565ms4136 KiB
95Elfogadva541ms4136 KiB
96Elfogadva559ms4152 KiB
97Elfogadva555ms4148 KiB
98Elfogadva575ms4124 KiB
99Elfogadva504ms4124 KiB
100Elfogadva411ms4128 KiB
101Elfogadva391ms4276 KiB
102Elfogadva486ms4384 KiB
103Elfogadva451ms4340 KiB
104Elfogadva432ms4336 KiB
105Elfogadva453ms4392 KiB
106Elfogadva432ms4464 KiB
107Elfogadva456ms4624 KiB
108Elfogadva465ms4576 KiB
109Elfogadva493ms4724 KiB
110Elfogadva477ms4616 KiB
111Elfogadva476ms4848 KiB
112Elfogadva481ms4932 KiB
113Elfogadva483ms4840 KiB
114Időlimit túllépés1.074s8264 KiB
115Időlimit túllépés1.054s8440 KiB
116Időlimit túllépés1.024s8428 KiB
117Időlimit túllépés1.049s8476 KiB
118Időlimit túllépés1.082s8324 KiB
119Időlimit túllépés1.065s8364 KiB
120Időlimit túllépés1.07s8396 KiB
121Időlimit túllépés1.065s8348 KiB
122Időlimit túllépés1.052s8412 KiB
123Időlimit túllépés1.054s8436 KiB
124Időlimit túllépés1.075s8496 KiB
125Időlimit túllépés1.057s8480 KiB
126Időlimit túllépés1.062s8480 KiB
127Időlimit túllépés1.057s8492 KiB
128Időlimit túllépés1.057s8532 KiB
129Időlimit túllépés1.082s8412 KiB
130Időlimit túllépés1.057s8388 KiB
131Időlimit túllépés1.065s8616 KiB
132Időlimit túllépés1.041s8392 KiB
133Időlimit túllépés1.049s8424 KiB
134Időlimit túllépés1.07s8708 KiB
135Időlimit túllépés1.07s8720 KiB
136Időlimit túllépés1.054s8856 KiB