109172024-04-18 20:52:47gortomiRajzcpp17Hibás válasz 0/100103ms30080 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;
    }
    return xa > 0 && max(ya, yb) >= 0 && min(ya, 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
1Elfogadva3ms1828 KiB
2Elfogadva3ms2072 KiB
subtask20/20
3Elfogadva3ms2284 KiB
4Hibás válasz3ms2492 KiB
5Elfogadva3ms2676 KiB
6Elfogadva2ms2756 KiB
7Hibás válasz3ms2872 KiB
8Elfogadva3ms2956 KiB
9Hibás válasz3ms3084 KiB
10Hibás válasz3ms3184 KiB
11Elfogadva3ms3508 KiB
12Elfogadva3ms3416 KiB
subtask30/20
13Elfogadva3ms2284 KiB
14Hibás válasz3ms2492 KiB
15Elfogadva3ms2676 KiB
16Elfogadva2ms2756 KiB
17Hibás válasz3ms2872 KiB
18Elfogadva3ms2956 KiB
19Hibás válasz3ms3084 KiB
20Hibás válasz3ms3184 KiB
21Elfogadva3ms3508 KiB
22Elfogadva3ms3416 KiB
23Elfogadva3ms3332 KiB
24Elfogadva3ms3408 KiB
25Hibás válasz3ms3620 KiB
26Hibás válasz3ms3616 KiB
27Elfogadva3ms4112 KiB
28Elfogadva3ms3888 KiB
29Elfogadva3ms3908 KiB
30Elfogadva3ms3988 KiB
31Elfogadva3ms3976 KiB
subtask40/20
32Elfogadva3ms2284 KiB
33Hibás válasz3ms2492 KiB
34Elfogadva3ms2676 KiB
35Elfogadva2ms2756 KiB
36Hibás válasz3ms2872 KiB
37Elfogadva3ms2956 KiB
38Hibás válasz3ms3084 KiB
39Hibás válasz3ms3184 KiB
40Elfogadva3ms3508 KiB
41Elfogadva3ms3416 KiB
42Elfogadva3ms3332 KiB
43Elfogadva3ms3408 KiB
44Hibás válasz3ms3620 KiB
45Hibás válasz3ms3616 KiB
46Elfogadva3ms4112 KiB
47Elfogadva3ms3888 KiB
48Elfogadva3ms3908 KiB
49Elfogadva3ms3988 KiB
50Elfogadva3ms3976 KiB
51Elfogadva3ms4308 KiB
52Elfogadva3ms4312 KiB
53Elfogadva4ms4564 KiB
54Elfogadva3ms4592 KiB
55Elfogadva3ms4588 KiB
56Elfogadva3ms4520 KiB
57Elfogadva3ms4528 KiB
58Elfogadva4ms4816 KiB
59Elfogadva3ms5044 KiB
60Elfogadva3ms4780 KiB
61Hibás válasz3ms4792 KiB
62Hibás válasz3ms4940 KiB
63Hibás válasz3ms4908 KiB
64Hibás válasz3ms5188 KiB
65Hibás válasz3ms5444 KiB
66Elfogadva3ms5340 KiB
67Elfogadva3ms5344 KiB
68Elfogadva4ms5392 KiB
69Elfogadva3ms5248 KiB
70Elfogadva4ms5172 KiB
subtask50/40
71Elfogadva3ms2284 KiB
72Hibás válasz3ms2492 KiB
73Elfogadva3ms2676 KiB
74Elfogadva2ms2756 KiB
75Hibás válasz3ms2872 KiB
76Elfogadva3ms2956 KiB
77Hibás válasz3ms3084 KiB
78Hibás válasz3ms3184 KiB
79Elfogadva3ms3508 KiB
80Elfogadva3ms3416 KiB
81Elfogadva3ms3332 KiB
82Elfogadva3ms3408 KiB
83Hibás válasz3ms3620 KiB
84Hibás válasz3ms3616 KiB
85Elfogadva3ms4112 KiB
86Elfogadva3ms3888 KiB
87Elfogadva3ms3908 KiB
88Elfogadva3ms3988 KiB
89Elfogadva3ms3976 KiB
90Elfogadva3ms4308 KiB
91Elfogadva3ms4312 KiB
92Elfogadva4ms4564 KiB
93Elfogadva3ms4592 KiB
94Elfogadva3ms4588 KiB
95Elfogadva3ms4520 KiB
96Elfogadva3ms4528 KiB
97Elfogadva4ms4816 KiB
98Elfogadva3ms5044 KiB
99Elfogadva3ms4780 KiB
100Hibás válasz3ms4792 KiB
101Hibás válasz3ms4940 KiB
102Hibás válasz3ms4908 KiB
103Hibás válasz3ms5188 KiB
104Hibás válasz3ms5444 KiB
105Elfogadva3ms5340 KiB
106Elfogadva3ms5344 KiB
107Elfogadva4ms5392 KiB
108Elfogadva3ms5248 KiB
109Elfogadva4ms5172 KiB
110Elfogadva89ms29408 KiB
111Hibás válasz81ms29448 KiB
112Elfogadva86ms29584 KiB
113Elfogadva86ms29620 KiB
114Elfogadva86ms29584 KiB
115Hibás válasz82ms29516 KiB
116Elfogadva90ms29600 KiB
117Elfogadva85ms29776 KiB
118Elfogadva83ms29780 KiB
119Elfogadva90ms29712 KiB
120Elfogadva90ms29708 KiB
121Elfogadva90ms29764 KiB
122Hibás válasz90ms29712 KiB
123Hibás válasz85ms29856 KiB
124Hibás válasz83ms30028 KiB
125Hibás válasz83ms30024 KiB
126Elfogadva93ms30024 KiB
127Elfogadva93ms30020 KiB
128Elfogadva100ms30024 KiB
129Elfogadva93ms30020 KiB
130Elfogadva97ms30024 KiB
131Elfogadva75ms30080 KiB
132Elfogadva103ms30080 KiB