Submission #636940

# Submission time Handle Problem Language Result Execution time Memory
636940 2022-08-30T15:28:24 Z tabr Roller Coaster Railroad (IOI16_railroad) C++17
64 / 100
209 ms 14632 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) 1e9);
    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 1 ms 212 KB n = 2
2 Correct 0 ms 212 KB n = 2
3 Correct 1 ms 256 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 1 ms 212 KB n = 3
8 Correct 0 ms 212 KB n = 3
9 Correct 1 ms 212 KB n = 3
10 Correct 0 ms 300 KB n = 8
11 Correct 1 ms 212 KB n = 8
12 Correct 0 ms 212 KB n = 8
13 Correct 1 ms 212 KB n = 8
14 Correct 1 ms 212 KB n = 8
15 Correct 1 ms 212 KB n = 8
16 Correct 1 ms 212 KB n = 8
17 Correct 1 ms 212 KB n = 8
18 Correct 1 ms 212 KB n = 8
19 Correct 1 ms 212 KB n = 3
20 Correct 1 ms 300 KB n = 7
21 Correct 1 ms 212 KB n = 8
22 Correct 1 ms 304 KB n = 8
23 Correct 1 ms 300 KB n = 8
24 Correct 1 ms 212 KB n = 8
25 Correct 0 ms 212 KB n = 8
# Verdict Execution time Memory Grader output
1 Correct 1 ms 212 KB n = 2
2 Correct 0 ms 212 KB n = 2
3 Correct 1 ms 256 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 1 ms 212 KB n = 3
8 Correct 0 ms 212 KB n = 3
9 Correct 1 ms 212 KB n = 3
10 Correct 0 ms 300 KB n = 8
11 Correct 1 ms 212 KB n = 8
12 Correct 0 ms 212 KB n = 8
13 Correct 1 ms 212 KB n = 8
14 Correct 1 ms 212 KB n = 8
15 Correct 1 ms 212 KB n = 8
16 Correct 1 ms 212 KB n = 8
17 Correct 1 ms 212 KB n = 8
18 Correct 1 ms 212 KB n = 8
19 Correct 1 ms 212 KB n = 3
20 Correct 1 ms 300 KB n = 7
21 Correct 1 ms 212 KB n = 8
22 Correct 1 ms 304 KB n = 8
23 Correct 1 ms 300 KB n = 8
24 Correct 1 ms 212 KB n = 8
25 Correct 0 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 0 ms 212 KB n = 16
30 Correct 0 ms 300 KB n = 16
31 Correct 0 ms 212 KB n = 16
32 Correct 0 ms 304 KB n = 16
33 Correct 1 ms 212 KB n = 16
34 Correct 0 ms 212 KB n = 16
35 Correct 1 ms 212 KB n = 16
36 Correct 1 ms 212 KB n = 15
37 Correct 1 ms 212 KB n = 8
38 Correct 1 ms 300 KB n = 16
39 Correct 1 ms 304 KB n = 16
40 Correct 1 ms 212 KB n = 9
41 Correct 1 ms 212 KB n = 16
42 Correct 1 ms 212 KB n = 16
43 Correct 1 ms 212 KB n = 16
44 Correct 1 ms 212 KB n = 9
45 Correct 0 ms 212 KB n = 15
46 Correct 1 ms 212 KB n = 16
47 Correct 1 ms 212 KB n = 16
48 Correct 0 ms 212 KB n = 16
# Verdict Execution time Memory Grader output
1 Correct 169 ms 10792 KB n = 199999
2 Correct 194 ms 10740 KB n = 199991
3 Correct 182 ms 10732 KB n = 199993
4 Correct 121 ms 8480 KB n = 152076
5 Correct 72 ms 5224 KB n = 93249
6 Correct 165 ms 9892 KB n = 199910
7 Correct 181 ms 10920 KB n = 199999
8 Correct 143 ms 10292 KB n = 199997
9 Correct 149 ms 9384 KB n = 171294
10 Correct 119 ms 7036 KB n = 140872
11 Correct 162 ms 10040 KB n = 199886
12 Correct 146 ms 11040 KB n = 199996
13 Correct 143 ms 10536 KB n = 200000
14 Correct 158 ms 12076 KB n = 199998
15 Correct 146 ms 11560 KB n = 200000
16 Correct 154 ms 11560 KB n = 199998
17 Correct 159 ms 13316 KB n = 200000
18 Correct 160 ms 10400 KB n = 190000
19 Correct 128 ms 11916 KB n = 177777
20 Correct 74 ms 5424 KB n = 100000
21 Correct 165 ms 10664 KB n = 200000
22 Correct 209 ms 12840 KB n = 200000
23 Correct 157 ms 10644 KB n = 200000
# Verdict Execution time Memory Grader output
1 Correct 1 ms 212 KB n = 2
2 Correct 0 ms 212 KB n = 2
3 Correct 1 ms 256 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 1 ms 212 KB n = 3
8 Correct 0 ms 212 KB n = 3
9 Correct 1 ms 212 KB n = 3
10 Correct 0 ms 300 KB n = 8
11 Correct 1 ms 212 KB n = 8
12 Correct 0 ms 212 KB n = 8
13 Correct 1 ms 212 KB n = 8
14 Correct 1 ms 212 KB n = 8
15 Correct 1 ms 212 KB n = 8
16 Correct 1 ms 212 KB n = 8
17 Correct 1 ms 212 KB n = 8
18 Correct 1 ms 212 KB n = 8
19 Correct 1 ms 212 KB n = 3
20 Correct 1 ms 300 KB n = 7
21 Correct 1 ms 212 KB n = 8
22 Correct 1 ms 304 KB n = 8
23 Correct 1 ms 300 KB n = 8
24 Correct 1 ms 212 KB n = 8
25 Correct 0 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 0 ms 212 KB n = 16
30 Correct 0 ms 300 KB n = 16
31 Correct 0 ms 212 KB n = 16
32 Correct 0 ms 304 KB n = 16
33 Correct 1 ms 212 KB n = 16
34 Correct 0 ms 212 KB n = 16
35 Correct 1 ms 212 KB n = 16
36 Correct 1 ms 212 KB n = 15
37 Correct 1 ms 212 KB n = 8
38 Correct 1 ms 300 KB n = 16
39 Correct 1 ms 304 KB n = 16
40 Correct 1 ms 212 KB n = 9
41 Correct 1 ms 212 KB n = 16
42 Correct 1 ms 212 KB n = 16
43 Correct 1 ms 212 KB n = 16
44 Correct 1 ms 212 KB n = 9
45 Correct 0 ms 212 KB n = 15
46 Correct 1 ms 212 KB n = 16
47 Correct 1 ms 212 KB n = 16
48 Correct 0 ms 212 KB n = 16
49 Correct 169 ms 10792 KB n = 199999
50 Correct 194 ms 10740 KB n = 199991
51 Correct 182 ms 10732 KB n = 199993
52 Correct 121 ms 8480 KB n = 152076
53 Correct 72 ms 5224 KB n = 93249
54 Correct 165 ms 9892 KB n = 199910
55 Correct 181 ms 10920 KB n = 199999
56 Correct 143 ms 10292 KB n = 199997
57 Correct 149 ms 9384 KB n = 171294
58 Correct 119 ms 7036 KB n = 140872
59 Correct 162 ms 10040 KB n = 199886
60 Correct 146 ms 11040 KB n = 199996
61 Correct 143 ms 10536 KB n = 200000
62 Correct 158 ms 12076 KB n = 199998
63 Correct 146 ms 11560 KB n = 200000
64 Correct 154 ms 11560 KB n = 199998
65 Correct 159 ms 13316 KB n = 200000
66 Correct 160 ms 10400 KB n = 190000
67 Correct 128 ms 11916 KB n = 177777
68 Correct 74 ms 5424 KB n = 100000
69 Correct 165 ms 10664 KB n = 200000
70 Correct 209 ms 12840 KB n = 200000
71 Correct 157 ms 10644 KB n = 200000
72 Correct 182 ms 14504 KB n = 200000
73 Correct 179 ms 14632 KB n = 200000
74 Correct 174 ms 14600 KB n = 200000
75 Correct 157 ms 14492 KB n = 200000
76 Correct 150 ms 14592 KB n = 200000
77 Incorrect 149 ms 14292 KB answer is not correct: 999999999 instead of 0
78 Halted 0 ms 0 KB -