106582024-04-07 19:06:52Valaki2Rajzcpp17Hibás válasz 0/1001.078s21884 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];
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 || intersect(points[cur], points[nei], origin, far)) {
            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] && intersect(points[i], points[j], origin, far)) {
                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);
        }
    }
    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
1Elfogadva3ms2064 KiB
2Hibás válasz3ms2400 KiB
subtask20/20
3Hibás válasz3ms2616 KiB
4Elfogadva3ms2464 KiB
5Elfogadva3ms2744 KiB
6Elfogadva3ms2940 KiB
7Hibás válasz3ms3152 KiB
8Hibás válasz3ms3180 KiB
9Elfogadva3ms3372 KiB
10Hibás válasz3ms3784 KiB
11Elfogadva3ms3592 KiB
12Elfogadva3ms3908 KiB
subtask30/20
13Hibás válasz3ms2616 KiB
14Elfogadva3ms2464 KiB
15Elfogadva3ms2744 KiB
16Elfogadva3ms2940 KiB
17Hibás válasz3ms3152 KiB
18Hibás válasz3ms3180 KiB
19Elfogadva3ms3372 KiB
20Hibás válasz3ms3784 KiB
21Elfogadva3ms3592 KiB
22Elfogadva3ms3908 KiB
23Hibás válasz3ms4240 KiB
24Elfogadva3ms4384 KiB
25Hibás válasz3ms4392 KiB
26Hibás válasz3ms4328 KiB
27Elfogadva3ms4444 KiB
28Hibás válasz3ms4336 KiB
29Elfogadva4ms4452 KiB
30Elfogadva4ms4432 KiB
31Elfogadva3ms4388 KiB
subtask40/20
32Hibás válasz3ms2616 KiB
33Elfogadva3ms2464 KiB
34Elfogadva3ms2744 KiB
35Elfogadva3ms2940 KiB
36Hibás válasz3ms3152 KiB
37Hibás válasz3ms3180 KiB
38Elfogadva3ms3372 KiB
39Hibás válasz3ms3784 KiB
40Elfogadva3ms3592 KiB
41Elfogadva3ms3908 KiB
42Hibás válasz3ms4240 KiB
43Elfogadva3ms4384 KiB
44Hibás válasz3ms4392 KiB
45Hibás válasz3ms4328 KiB
46Elfogadva3ms4444 KiB
47Hibás válasz3ms4336 KiB
48Elfogadva4ms4452 KiB
49Elfogadva4ms4432 KiB
50Elfogadva3ms4388 KiB
51Hibás válasz4ms5384 KiB
52Hibás válasz4ms5592 KiB
53Hibás válasz4ms5684 KiB
54Hibás válasz4ms5820 KiB
55Hibás válasz4ms6036 KiB
56Hibás válasz8ms6120 KiB
57Hibás válasz7ms6120 KiB
58Hibás válasz9ms6076 KiB
59Hibás válasz8ms6132 KiB
60Hibás válasz8ms6348 KiB
61Elfogadva7ms6328 KiB
62Hibás válasz7ms6480 KiB
63Hibás válasz6ms6536 KiB
64Hibás válasz7ms6436 KiB
65Hibás válasz7ms6440 KiB
66Elfogadva13ms6532 KiB
67Elfogadva25ms6440 KiB
68Elfogadva28ms6432 KiB
69Elfogadva28ms6360 KiB
70Elfogadva26ms6440 KiB
subtask50/40
71Hibás válasz3ms2616 KiB
72Elfogadva3ms2464 KiB
73Elfogadva3ms2744 KiB
74Elfogadva3ms2940 KiB
75Hibás válasz3ms3152 KiB
76Hibás válasz3ms3180 KiB
77Elfogadva3ms3372 KiB
78Hibás válasz3ms3784 KiB
79Elfogadva3ms3592 KiB
80Elfogadva3ms3908 KiB
81Hibás válasz3ms4240 KiB
82Elfogadva3ms4384 KiB
83Hibás válasz3ms4392 KiB
84Hibás válasz3ms4328 KiB
85Elfogadva3ms4444 KiB
86Hibás válasz3ms4336 KiB
87Elfogadva4ms4452 KiB
88Elfogadva4ms4432 KiB
89Elfogadva3ms4388 KiB
90Hibás válasz4ms5384 KiB
91Hibás válasz4ms5592 KiB
92Hibás válasz4ms5684 KiB
93Hibás válasz4ms5820 KiB
94Hibás válasz4ms6036 KiB
95Hibás válasz8ms6120 KiB
96Hibás válasz7ms6120 KiB
97Hibás válasz9ms6076 KiB
98Hibás válasz8ms6132 KiB
99Hibás válasz8ms6348 KiB
100Elfogadva7ms6328 KiB
101Hibás válasz7ms6480 KiB
102Hibás válasz6ms6536 KiB
103Hibás válasz7ms6436 KiB
104Hibás válasz7ms6440 KiB
105Elfogadva13ms6532 KiB
106Elfogadva25ms6440 KiB
107Elfogadva28ms6432 KiB
108Elfogadva28ms6360 KiB
109Elfogadva26ms6440 KiB
110Hibás válasz148ms21192 KiB
111Hibás válasz130ms21436 KiB
112Hibás válasz118ms21316 KiB
113Hibás válasz130ms21336 KiB
114Hibás válasz187ms21348 KiB
115Hibás válasz135ms21384 KiB
116Hibás válasz308ms21408 KiB
117Hibás válasz351ms21508 KiB
118Hibás válasz400ms21668 KiB
119Hibás válasz360ms21700 KiB
120Hibás válasz372ms21800 KiB
121Hibás válasz351ms21840 KiB
122Hibás válasz286ms21856 KiB
123Hibás válasz256ms21760 KiB
124Hibás válasz259ms21772 KiB
125Hibás válasz225ms21716 KiB
126Időlimit túllépés1.067s21884 KiB
127Elfogadva971ms21784 KiB
128Időlimit túllépés1.062s13088 KiB
129Időlimit túllépés1.05s21844 KiB
130Időlimit túllépés1.059s13068 KiB
131Időlimit túllépés1.062s13068 KiB
132Időlimit túllépés1.078s13184 KiB