109162024-04-18 20:50:33gortomiRajzcpp17Hibás válasz 0/10097ms30024 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
1Elfogadva3ms1824 KiB
2Elfogadva3ms2068 KiB
subtask20/20
3Elfogadva3ms2276 KiB
4Hibás válasz3ms2316 KiB
5Elfogadva3ms2448 KiB
6Elfogadva3ms2672 KiB
7Hibás válasz3ms2768 KiB
8Elfogadva3ms2852 KiB
9Hibás válasz3ms2984 KiB
10Hibás válasz3ms3196 KiB
11Elfogadva3ms3268 KiB
12Elfogadva3ms3272 KiB
subtask30/20
13Elfogadva3ms2276 KiB
14Hibás válasz3ms2316 KiB
15Elfogadva3ms2448 KiB
16Elfogadva3ms2672 KiB
17Hibás válasz3ms2768 KiB
18Elfogadva3ms2852 KiB
19Hibás válasz3ms2984 KiB
20Hibás válasz3ms3196 KiB
21Elfogadva3ms3268 KiB
22Elfogadva3ms3272 KiB
23Elfogadva3ms3420 KiB
24Elfogadva3ms3612 KiB
25Hibás válasz3ms3824 KiB
26Hibás válasz3ms3912 KiB
27Elfogadva3ms4124 KiB
28Elfogadva3ms4220 KiB
29Elfogadva3ms4436 KiB
30Elfogadva3ms4432 KiB
31Elfogadva3ms4412 KiB
subtask40/20
32Elfogadva3ms2276 KiB
33Hibás válasz3ms2316 KiB
34Elfogadva3ms2448 KiB
35Elfogadva3ms2672 KiB
36Hibás válasz3ms2768 KiB
37Elfogadva3ms2852 KiB
38Hibás válasz3ms2984 KiB
39Hibás válasz3ms3196 KiB
40Elfogadva3ms3268 KiB
41Elfogadva3ms3272 KiB
42Elfogadva3ms3420 KiB
43Elfogadva3ms3612 KiB
44Hibás válasz3ms3824 KiB
45Hibás válasz3ms3912 KiB
46Elfogadva3ms4124 KiB
47Elfogadva3ms4220 KiB
48Elfogadva3ms4436 KiB
49Elfogadva3ms4432 KiB
50Elfogadva3ms4412 KiB
51Elfogadva3ms4792 KiB
52Elfogadva3ms4816 KiB
53Elfogadva3ms4812 KiB
54Elfogadva3ms5108 KiB
55Elfogadva3ms5112 KiB
56Elfogadva3ms5108 KiB
57Elfogadva3ms5044 KiB
58Elfogadva3ms5036 KiB
59Elfogadva3ms5008 KiB
60Elfogadva3ms5272 KiB
61Hibás válasz3ms5220 KiB
62Hibás válasz3ms5212 KiB
63Hibás válasz3ms5244 KiB
64Hibás válasz3ms5252 KiB
65Hibás válasz3ms5216 KiB
66Elfogadva4ms5220 KiB
67Elfogadva4ms5496 KiB
68Elfogadva4ms5500 KiB
69Elfogadva3ms5532 KiB
70Elfogadva3ms5556 KiB
subtask50/40
71Elfogadva3ms2276 KiB
72Hibás válasz3ms2316 KiB
73Elfogadva3ms2448 KiB
74Elfogadva3ms2672 KiB
75Hibás válasz3ms2768 KiB
76Elfogadva3ms2852 KiB
77Hibás válasz3ms2984 KiB
78Hibás válasz3ms3196 KiB
79Elfogadva3ms3268 KiB
80Elfogadva3ms3272 KiB
81Elfogadva3ms3420 KiB
82Elfogadva3ms3612 KiB
83Hibás válasz3ms3824 KiB
84Hibás válasz3ms3912 KiB
85Elfogadva3ms4124 KiB
86Elfogadva3ms4220 KiB
87Elfogadva3ms4436 KiB
88Elfogadva3ms4432 KiB
89Elfogadva3ms4412 KiB
90Elfogadva3ms4792 KiB
91Elfogadva3ms4816 KiB
92Elfogadva3ms4812 KiB
93Elfogadva3ms5108 KiB
94Elfogadva3ms5112 KiB
95Elfogadva3ms5108 KiB
96Elfogadva3ms5044 KiB
97Elfogadva3ms5036 KiB
98Elfogadva3ms5008 KiB
99Elfogadva3ms5272 KiB
100Hibás válasz3ms5220 KiB
101Hibás válasz3ms5212 KiB
102Hibás válasz3ms5244 KiB
103Hibás válasz3ms5252 KiB
104Hibás válasz3ms5216 KiB
105Elfogadva4ms5220 KiB
106Elfogadva4ms5496 KiB
107Elfogadva4ms5500 KiB
108Elfogadva3ms5532 KiB
109Elfogadva3ms5556 KiB
110Elfogadva86ms29684 KiB
111Hibás válasz86ms29736 KiB
112Elfogadva82ms29784 KiB
113Elfogadva85ms29672 KiB
114Elfogadva82ms29664 KiB
115Hibás válasz85ms29712 KiB
116Elfogadva90ms29716 KiB
117Elfogadva85ms29724 KiB
118Elfogadva89ms29716 KiB
119Elfogadva85ms29716 KiB
120Elfogadva89ms29712 KiB
121Elfogadva90ms29684 KiB
122Hibás válasz90ms29740 KiB
123Hibás válasz85ms29736 KiB
124Hibás válasz89ms29712 KiB
125Hibás válasz85ms29888 KiB
126Elfogadva93ms30016 KiB
127Elfogadva93ms30020 KiB
128Elfogadva96ms30024 KiB
129Elfogadva93ms29884 KiB
130Elfogadva97ms29928 KiB
131Elfogadva75ms29968 KiB
132Elfogadva97ms29976 KiB