109182024-04-18 20:55:23gortomiRajzcpp17Hibás válasz 0/100100ms29980 KiB
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
vector<int> p, r;
int n;
int get(int v)
{
    return p[v] == 0 ? v : p[v] = get(p[v]);
}
void unio(int a, int b)
{
    a = get(a);
    b = get(b);
    if(a != b)
    {
        if(r[a] < r[b]) swap(a, b);
        p[b] = a;
        if(r[a] == r[b]) r[a]++;
    }
}
struct val
{
    ll a, b, d;
};
bool insc(ll xa, ll xb, ll ya, ll yb)
{
    if(ya == yb) return 0;
    if(xb != xa)
    {
        ll x = xa * (yb - ya) + -ya * (xb - xa);
        ll l = xa * (yb - ya), r = xb * (yb - ya);
        if(l > r) swap(l, r);
        return ((x > 0) ^ (ya > yb)) && x >= l && x <= r;
    }
    if(ya > yb) swap(ya, yb);
    return xa > 0 && ya <= 0 && yb >= 0;
}
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cin >> n;
    p.resize(2 * n + 1);
    r.resize(2 * n + 1);
    vector<ll> x(n + 1), y(n + 1);
    vector<val> e;
    for(int i = 1; i <= n; i++)
    {
        cin >> x[i] >> y[i];
        for(int j = 1; j < i; j++)
        {
            ll dx = x[i] - x[j], dy = y[i] - y[j];
            e.push_back({j, i, dx * dx + dy * dy});
        }
    }
    sort(e.begin(), e.end(), [](val a, val b)
    {
        return a.d < b.d;
    });
    for(auto [a, b, d] : e)
    {
        bool g = insc(x[a], x[b], y[a], y[b]);
        //cout << a << " " << b << " " << d << " " << g << "\n";
        if(g)
        {
            unio(a, b + n);
            unio(a + n, b);
        }
        else
        {
            unio(a, b);
            unio(a + n, b + n);
        }
        if(get(a) == get(a + n))
        {
            cout << d << "\n";
            return 0;
        }
    }
    cout << "-1\n";
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva3ms1700 KiB
2Elfogadva3ms1876 KiB
subtask20/20
3Elfogadva3ms2084 KiB
4Hibás válasz3ms2308 KiB
5Elfogadva2ms2380 KiB
6Elfogadva2ms2480 KiB
7Hibás válasz3ms2504 KiB
8Elfogadva3ms2604 KiB
9Hibás válasz3ms2732 KiB
10Hibás válasz2ms2804 KiB
11Elfogadva2ms2796 KiB
12Elfogadva3ms3080 KiB
subtask30/20
13Elfogadva3ms2084 KiB
14Hibás válasz3ms2308 KiB
15Elfogadva2ms2380 KiB
16Elfogadva2ms2480 KiB
17Hibás válasz3ms2504 KiB
18Elfogadva3ms2604 KiB
19Hibás válasz3ms2732 KiB
20Hibás válasz2ms2804 KiB
21Elfogadva2ms2796 KiB
22Elfogadva3ms3080 KiB
23Elfogadva3ms3200 KiB
24Elfogadva3ms3284 KiB
25Hibás válasz3ms3168 KiB
26Hibás válasz3ms3512 KiB
27Elfogadva3ms3496 KiB
28Elfogadva3ms3580 KiB
29Elfogadva3ms3468 KiB
30Elfogadva3ms3600 KiB
31Elfogadva3ms3648 KiB
subtask40/20
32Elfogadva3ms2084 KiB
33Hibás válasz3ms2308 KiB
34Elfogadva2ms2380 KiB
35Elfogadva2ms2480 KiB
36Hibás válasz3ms2504 KiB
37Elfogadva3ms2604 KiB
38Hibás válasz3ms2732 KiB
39Hibás válasz2ms2804 KiB
40Elfogadva2ms2796 KiB
41Elfogadva3ms3080 KiB
42Elfogadva3ms3200 KiB
43Elfogadva3ms3284 KiB
44Hibás válasz3ms3168 KiB
45Hibás válasz3ms3512 KiB
46Elfogadva3ms3496 KiB
47Elfogadva3ms3580 KiB
48Elfogadva3ms3468 KiB
49Elfogadva3ms3600 KiB
50Elfogadva3ms3648 KiB
51Elfogadva3ms4364 KiB
52Elfogadva3ms4648 KiB
53Elfogadva3ms4532 KiB
54Elfogadva3ms4816 KiB
55Elfogadva3ms5100 KiB
56Elfogadva3ms5252 KiB
57Elfogadva3ms5096 KiB
58Elfogadva3ms5224 KiB
59Elfogadva3ms5252 KiB
60Elfogadva3ms5160 KiB
61Hibás válasz3ms5156 KiB
62Hibás válasz3ms5188 KiB
63Hibás válasz3ms5196 KiB
64Hibás válasz3ms5188 KiB
65Hibás válasz3ms5192 KiB
66Elfogadva3ms5160 KiB
67Elfogadva4ms5188 KiB
68Elfogadva3ms5224 KiB
69Elfogadva3ms5216 KiB
70Elfogadva4ms5248 KiB
subtask50/40
71Elfogadva3ms2084 KiB
72Hibás válasz3ms2308 KiB
73Elfogadva2ms2380 KiB
74Elfogadva2ms2480 KiB
75Hibás válasz3ms2504 KiB
76Elfogadva3ms2604 KiB
77Hibás válasz3ms2732 KiB
78Hibás válasz2ms2804 KiB
79Elfogadva2ms2796 KiB
80Elfogadva3ms3080 KiB
81Elfogadva3ms3200 KiB
82Elfogadva3ms3284 KiB
83Hibás válasz3ms3168 KiB
84Hibás válasz3ms3512 KiB
85Elfogadva3ms3496 KiB
86Elfogadva3ms3580 KiB
87Elfogadva3ms3468 KiB
88Elfogadva3ms3600 KiB
89Elfogadva3ms3648 KiB
90Elfogadva3ms4364 KiB
91Elfogadva3ms4648 KiB
92Elfogadva3ms4532 KiB
93Elfogadva3ms4816 KiB
94Elfogadva3ms5100 KiB
95Elfogadva3ms5252 KiB
96Elfogadva3ms5096 KiB
97Elfogadva3ms5224 KiB
98Elfogadva3ms5252 KiB
99Elfogadva3ms5160 KiB
100Hibás válasz3ms5156 KiB
101Hibás válasz3ms5188 KiB
102Hibás válasz3ms5196 KiB
103Hibás válasz3ms5188 KiB
104Hibás válasz3ms5192 KiB
105Elfogadva3ms5160 KiB
106Elfogadva4ms5188 KiB
107Elfogadva3ms5224 KiB
108Elfogadva3ms5216 KiB
109Elfogadva4ms5248 KiB
110Elfogadva86ms29396 KiB
111Hibás válasz82ms29396 KiB
112Elfogadva86ms29396 KiB
113Elfogadva81ms29444 KiB
114Elfogadva86ms29444 KiB
115Hibás válasz82ms29504 KiB
116Elfogadva89ms29448 KiB
117Elfogadva89ms29444 KiB
118Elfogadva89ms29440 KiB
119Elfogadva90ms29464 KiB
120Elfogadva89ms29612 KiB
121Elfogadva90ms29636 KiB
122Hibás válasz85ms29816 KiB
123Hibás válasz89ms29852 KiB
124Hibás válasz89ms29816 KiB
125Hibás válasz85ms29896 KiB
126Elfogadva98ms29980 KiB
127Elfogadva97ms29912 KiB
128Elfogadva100ms29916 KiB
129Elfogadva97ms29860 KiB
130Elfogadva93ms29912 KiB
131Elfogadva75ms29868 KiB
132Elfogadva98ms29868 KiB