Submission #612668

# Submission time Handle Problem Language Result Execution time Memory
612668 2022-07-29T20:03:26 Z snasibov05 Rail (IOI14_rail) C++14
100 / 100
123 ms 660 KB
#include "rail.h"
#include <bits/stdc++.h>

using namespace std;

#define oo 1000000000

void findLocation(int n, int first, int location[], int stype[]){
    location[0] = first;
    stype[0] = 1;

    vector<int> d0(n);
    for (int i = 1; i < n; ++i) d0[i] = getDistance(0, i);
    vector<bool> visited(n); visited[0] = true;

    if (n == 1) return;

    int mni = -1;
    for (int i = 0; i < n; ++i){
        if (!visited[i] && (mni == -1 || d0[i] < d0[mni])) mni = i;
    }
    location[mni] = location[0] + d0[mni];
    stype[mni] = 2;
    visited[mni] = true;

    int l = 0, r = mni;
    vector<pair<int, int>> c, d;
    c.push_back({-location[l], l});
    d.push_back({location[r], r});
    for (int j = 2; j < n; ++j) {
        int cur = -1;
        for (int i = 0; i < n; ++i){
            if (!visited[i] && (cur == -1 || d0[i] < d0[cur])) cur = i;
        }
        visited[cur] = true;
        int dl = getDistance(l, cur), dr = getDistance(r, cur);

        auto it = upper_bound(d.begin(), d.end(), make_pair(location[r] - dr, cur));
        if (location[r] - dr > location[l] && it != d.end() && 2 * location[it->second] - dl - location[l] == location[r] - dr) {
            stype[cur] = 1;
            location[cur] = location[r] - dr;
            continue;
        }

        it = upper_bound(c.begin(), c.end(), make_pair(-(location[l] + dl), cur));
        if (location[l] + dl < location[r] && it != c.end() && dr - location[r] + 2 * location[it->second] == location[l] + dl) {
            stype[cur] = 2;
            location[cur] = location[l] + dl;
            continue;
        }

        if (d0[cur] == d0[mni] + dr - (location[r] - location[mni])) {
            stype[cur] = 1;
            location[cur] = location[r] - dr;
            c.push_back(make_pair(-location[cur], cur));
            l = cur;
        } else {
            stype[cur] = 2;
            location[cur] = location[l] + dl;
            d.push_back(make_pair(location[cur], cur));
            r = cur;
        }
    }
}
# Verdict Execution time Memory Grader output
1 Correct 1 ms 384 KB Output is correct
2 Correct 1 ms 340 KB Output is correct
3 Correct 1 ms 340 KB Output is correct
4 Correct 1 ms 340 KB Output is correct
5 Correct 1 ms 340 KB Output is correct
6 Correct 1 ms 340 KB Output is correct
7 Correct 1 ms 380 KB Output is correct
8 Correct 1 ms 340 KB Output is correct
9 Correct 0 ms 340 KB Output is correct
10 Correct 1 ms 340 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 380 KB Output is correct
2 Correct 0 ms 340 KB Output is correct
3 Correct 1 ms 340 KB Output is correct
4 Correct 1 ms 340 KB Output is correct
5 Correct 1 ms 340 KB Output is correct
6 Correct 1 ms 372 KB Output is correct
7 Correct 1 ms 384 KB Output is correct
8 Correct 1 ms 340 KB Output is correct
9 Correct 1 ms 340 KB Output is correct
10 Correct 1 ms 340 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 123 ms 500 KB Output is correct
2 Correct 116 ms 496 KB Output is correct
3 Correct 117 ms 500 KB Output is correct
4 Correct 115 ms 660 KB Output is correct
5 Correct 116 ms 468 KB Output is correct
6 Correct 120 ms 496 KB Output is correct
7 Correct 117 ms 508 KB Output is correct
8 Correct 123 ms 496 KB Output is correct
9 Correct 116 ms 508 KB Output is correct
10 Correct 119 ms 504 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 116 ms 468 KB Output is correct
2 Correct 117 ms 512 KB Output is correct
3 Correct 122 ms 504 KB Output is correct
4 Correct 119 ms 496 KB Output is correct
5 Correct 121 ms 500 KB Output is correct
6 Correct 116 ms 572 KB Output is correct
7 Correct 121 ms 508 KB Output is correct
8 Correct 114 ms 496 KB Output is correct
9 Correct 118 ms 468 KB Output is correct
10 Correct 118 ms 468 KB Output is correct
11 Correct 118 ms 500 KB Output is correct
12 Correct 122 ms 508 KB Output is correct
13 Correct 118 ms 636 KB Output is correct
14 Correct 123 ms 560 KB Output is correct
15 Correct 119 ms 468 KB Output is correct
16 Correct 118 ms 500 KB Output is correct
17 Correct 116 ms 576 KB Output is correct
18 Correct 123 ms 512 KB Output is correct
19 Correct 118 ms 500 KB Output is correct
20 Correct 116 ms 512 KB Output is correct