Submission #636941

# Submission time Handle Problem Language Result Execution time Memory
636941 2022-08-30T15:32:12 Z tabr Roller Coaster Railroad (IOI16_railroad) C++17
64 / 100
207 ms 13212 KB
#include <bits/stdc++.h>
using namespace std;
#ifdef tabr
#include "library/debug.cpp"
#else
#define debug(...)
#endif

// editorial

struct dsu {
    vector<int> p;
    vector<int> sz;
    int n;

    dsu(int _n) : n(_n) {
        p = vector<int>(n);
        iota(p.begin(), p.end(), 0);
        sz = vector<int>(n, 1);
    }

    inline int get(int x) {
        if (p[x] == x) {
            return x;
        } else {
            return p[x] = get(p[x]);
        }
    }

    inline bool unite(int x, int y) {
        x = get(x);
        y = get(y);
        if (x == y) {
            return false;
        }
        p[x] = y;
        sz[y] += sz[x];
        return true;
    }

    inline bool same(int x, int y) {
        return (get(x) == get(y));
    }

    inline int size(int x) {
        return sz[get(x)];
    }

    inline bool root(int x) {
        return (x == get(x));
    }
};

long long plan_roller_coaster(vector<int> s, vector<int> t) {
    s.emplace_back((int) 2e9);
    t.emplace_back(1);
    int n = (int) s.size();
    vector<int> p;
    for (int i = 0; i < n; i++) {
        p.emplace_back(s[i]);
        p.emplace_back(t[i]);
    }
    sort(p.begin(), p.end());
    p.resize(unique(p.begin(), p.end()) - p.begin());
    int m = (int) p.size();
    dsu uf(m);
    vector<int> a(m);
    for (int i = 0; i < m; i++) {
        int x = (int) (lower_bound(p.begin(), p.end(), s[i]) - p.begin());
        int y = (int) (lower_bound(p.begin(), p.end(), t[i]) - p.begin());
        uf.unite(x, y);
        a[x]++;
        a[y]--;
    }
    long long res = 0;
    for (int i = 0; i < m - 1; i++) {
        a[i + 1] += a[i];
        if (a[i]) {
            uf.unite(i, i + 1);
        }
        if (a[i] > 0) {
            res += a[i] * 1LL * (p[i + 1] - p[i]);
        }
    }
    vector<pair<int, int>> edges;
    for (int i = 0; i < m - 1; i++) {
        if (!uf.same(i, i + 1)) {
            edges.emplace_back(p[i + 1] - p[i], i);
        }
    }
    sort(edges.begin(), edges.end());
    for (auto [x, y] : edges) {
        if (uf.unite(y, y + 1)) {
            res += x;
        }
    }
    return res;
}

#ifdef tabr
int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    debug(plan_roller_coaster({1, 4, 5, 6}, {7, 3, 8, 6}));
    return 0;
}
#endif
# Verdict Execution time Memory Grader output
1 Correct 0 ms 212 KB n = 2
2 Correct 0 ms 212 KB n = 2
3 Correct 0 ms 212 KB n = 2
4 Correct 0 ms 212 KB n = 2
5 Correct 0 ms 212 KB n = 2
6 Correct 0 ms 212 KB n = 2
7 Correct 0 ms 212 KB n = 3
8 Correct 1 ms 212 KB n = 3
9 Correct 0 ms 212 KB n = 3
10 Correct 0 ms 212 KB n = 8
11 Correct 1 ms 212 KB n = 8
12 Correct 0 ms 212 KB n = 8
13 Correct 0 ms 212 KB n = 8
14 Correct 0 ms 212 KB n = 8
15 Correct 0 ms 212 KB n = 8
16 Correct 0 ms 212 KB n = 8
17 Correct 1 ms 212 KB n = 8
18 Correct 0 ms 212 KB n = 8
19 Correct 0 ms 212 KB n = 3
20 Correct 0 ms 212 KB n = 7
21 Correct 0 ms 212 KB n = 8
22 Correct 0 ms 212 KB n = 8
23 Correct 1 ms 212 KB n = 8
24 Correct 0 ms 212 KB n = 8
25 Correct 1 ms 212 KB n = 8
# Verdict Execution time Memory Grader output
1 Correct 0 ms 212 KB n = 2
2 Correct 0 ms 212 KB n = 2
3 Correct 0 ms 212 KB n = 2
4 Correct 0 ms 212 KB n = 2
5 Correct 0 ms 212 KB n = 2
6 Correct 0 ms 212 KB n = 2
7 Correct 0 ms 212 KB n = 3
8 Correct 1 ms 212 KB n = 3
9 Correct 0 ms 212 KB n = 3
10 Correct 0 ms 212 KB n = 8
11 Correct 1 ms 212 KB n = 8
12 Correct 0 ms 212 KB n = 8
13 Correct 0 ms 212 KB n = 8
14 Correct 0 ms 212 KB n = 8
15 Correct 0 ms 212 KB n = 8
16 Correct 0 ms 212 KB n = 8
17 Correct 1 ms 212 KB n = 8
18 Correct 0 ms 212 KB n = 8
19 Correct 0 ms 212 KB n = 3
20 Correct 0 ms 212 KB n = 7
21 Correct 0 ms 212 KB n = 8
22 Correct 0 ms 212 KB n = 8
23 Correct 1 ms 212 KB n = 8
24 Correct 0 ms 212 KB n = 8
25 Correct 1 ms 212 KB n = 8
26 Correct 0 ms 212 KB n = 8
27 Correct 0 ms 212 KB n = 8
28 Correct 0 ms 212 KB n = 8
29 Correct 1 ms 212 KB n = 16
30 Correct 0 ms 212 KB n = 16
31 Correct 0 ms 212 KB n = 16
32 Correct 0 ms 212 KB n = 16
33 Correct 0 ms 212 KB n = 16
34 Correct 0 ms 212 KB n = 16
35 Correct 1 ms 212 KB n = 16
36 Correct 0 ms 212 KB n = 15
37 Correct 0 ms 212 KB n = 8
38 Correct 1 ms 288 KB n = 16
39 Correct 1 ms 212 KB n = 16
40 Correct 0 ms 212 KB n = 9
41 Correct 0 ms 212 KB n = 16
42 Correct 1 ms 212 KB n = 16
43 Correct 0 ms 212 KB n = 16
44 Correct 0 ms 212 KB n = 9
45 Correct 0 ms 212 KB n = 15
46 Correct 0 ms 212 KB n = 16
47 Correct 0 ms 212 KB n = 16
48 Correct 0 ms 212 KB n = 16
# Verdict Execution time Memory Grader output
1 Correct 195 ms 10652 KB n = 199999
2 Correct 191 ms 10744 KB n = 199991
3 Correct 178 ms 10660 KB n = 199993
4 Correct 127 ms 8472 KB n = 152076
5 Correct 77 ms 5208 KB n = 93249
6 Correct 151 ms 9960 KB n = 199910
7 Correct 147 ms 11048 KB n = 199999
8 Correct 145 ms 10284 KB n = 199997
9 Correct 156 ms 9260 KB n = 171294
10 Correct 123 ms 7084 KB n = 140872
11 Correct 146 ms 10028 KB n = 199886
12 Correct 159 ms 11044 KB n = 199996
13 Correct 151 ms 10532 KB n = 200000
14 Correct 156 ms 12180 KB n = 199998
15 Correct 151 ms 11588 KB n = 200000
16 Correct 161 ms 11608 KB n = 199998
17 Correct 179 ms 13212 KB n = 200000
18 Correct 158 ms 10392 KB n = 190000
19 Correct 131 ms 11988 KB n = 177777
20 Correct 72 ms 5476 KB n = 100000
21 Correct 169 ms 10660 KB n = 200000
22 Correct 207 ms 12844 KB n = 200000
23 Correct 179 ms 10732 KB n = 200000
# Verdict Execution time Memory Grader output
1 Correct 0 ms 212 KB n = 2
2 Correct 0 ms 212 KB n = 2
3 Correct 0 ms 212 KB n = 2
4 Correct 0 ms 212 KB n = 2
5 Correct 0 ms 212 KB n = 2
6 Correct 0 ms 212 KB n = 2
7 Correct 0 ms 212 KB n = 3
8 Correct 1 ms 212 KB n = 3
9 Correct 0 ms 212 KB n = 3
10 Correct 0 ms 212 KB n = 8
11 Correct 1 ms 212 KB n = 8
12 Correct 0 ms 212 KB n = 8
13 Correct 0 ms 212 KB n = 8
14 Correct 0 ms 212 KB n = 8
15 Correct 0 ms 212 KB n = 8
16 Correct 0 ms 212 KB n = 8
17 Correct 1 ms 212 KB n = 8
18 Correct 0 ms 212 KB n = 8
19 Correct 0 ms 212 KB n = 3
20 Correct 0 ms 212 KB n = 7
21 Correct 0 ms 212 KB n = 8
22 Correct 0 ms 212 KB n = 8
23 Correct 1 ms 212 KB n = 8
24 Correct 0 ms 212 KB n = 8
25 Correct 1 ms 212 KB n = 8
26 Correct 0 ms 212 KB n = 8
27 Correct 0 ms 212 KB n = 8
28 Correct 0 ms 212 KB n = 8
29 Correct 1 ms 212 KB n = 16
30 Correct 0 ms 212 KB n = 16
31 Correct 0 ms 212 KB n = 16
32 Correct 0 ms 212 KB n = 16
33 Correct 0 ms 212 KB n = 16
34 Correct 0 ms 212 KB n = 16
35 Correct 1 ms 212 KB n = 16
36 Correct 0 ms 212 KB n = 15
37 Correct 0 ms 212 KB n = 8
38 Correct 1 ms 288 KB n = 16
39 Correct 1 ms 212 KB n = 16
40 Correct 0 ms 212 KB n = 9
41 Correct 0 ms 212 KB n = 16
42 Correct 1 ms 212 KB n = 16
43 Correct 0 ms 212 KB n = 16
44 Correct 0 ms 212 KB n = 9
45 Correct 0 ms 212 KB n = 15
46 Correct 0 ms 212 KB n = 16
47 Correct 0 ms 212 KB n = 16
48 Correct 0 ms 212 KB n = 16
49 Correct 195 ms 10652 KB n = 199999
50 Correct 191 ms 10744 KB n = 199991
51 Correct 178 ms 10660 KB n = 199993
52 Correct 127 ms 8472 KB n = 152076
53 Correct 77 ms 5208 KB n = 93249
54 Correct 151 ms 9960 KB n = 199910
55 Correct 147 ms 11048 KB n = 199999
56 Correct 145 ms 10284 KB n = 199997
57 Correct 156 ms 9260 KB n = 171294
58 Correct 123 ms 7084 KB n = 140872
59 Correct 146 ms 10028 KB n = 199886
60 Correct 159 ms 11044 KB n = 199996
61 Correct 151 ms 10532 KB n = 200000
62 Correct 156 ms 12180 KB n = 199998
63 Correct 151 ms 11588 KB n = 200000
64 Correct 161 ms 11608 KB n = 199998
65 Correct 179 ms 13212 KB n = 200000
66 Correct 158 ms 10392 KB n = 190000
67 Correct 131 ms 11988 KB n = 177777
68 Correct 72 ms 5476 KB n = 100000
69 Correct 169 ms 10660 KB n = 200000
70 Correct 207 ms 12844 KB n = 200000
71 Correct 179 ms 10732 KB n = 200000
72 Correct 166 ms 10728 KB n = 200000
73 Correct 179 ms 10736 KB n = 200000
74 Correct 204 ms 10788 KB n = 200000
75 Correct 150 ms 10720 KB n = 200000
76 Correct 162 ms 10656 KB n = 200000
77 Incorrect 147 ms 10408 KB answer is not correct: 1999999999 instead of 0
78 Halted 0 ms 0 KB -