Submission #493214

# Submission time Handle Problem Language Result Execution time Memory
493214 2021-12-10T11:37:53 Z InternetPerson10 Rail (IOI14_rail) C++17
30 / 100
78 ms 1476 KB
#include "rail.h"
#include <bits/stdc++.h>

using namespace std;

vector<int> v0, vk;
vector<pair<int, int>> v1, v2;

map<pair<int, int>, int> MA;

int BIG = 1000001;

int ge(int x, int y) {
    pair<int, int> p = {min(x, y), max(x, y)};
    if(x == y) {
        MA[p] = 0;
    }
    else if(!MA.count(p)) MA[p] = getDistance(x, y);
    return MA[p];
}

void findLocation(int n, int first, int location[], int stype[]) {
    location[0] = first;
    stype[0] = 1;
    if(n == 1) return;
    v0.resize(n);
    vk.resize(n);
    for(int i = 0; i < n; i++) {
        v0[i] = ge(0, i); 
    }
    int mi = BIG;
    for(int i = 1; i < n; i++) {
        mi = min(mi, v0[i]);
    }
    int k = 1;
    for(int i = 1; i < n; i++) {
        if(mi == v0[i]) k = i;
    }
    location[k] = location[0] + mi;
    stype[k] = 2;
    for(int i = 0; i < n; i++) {
        if(i == 0 || i == k) continue;
        vk[i] = ge(i, k);
        int x = min(vk[i], v0[i]);
        if(x < mi) {
            location[i] = location[k] - x;
            stype[i] = 1;
        }
        else if(v0[i] == x) {
            v1.push_back({x, i});
        }
        else {
            v2.push_back({x, i});
        }
    }
    sort(v1.begin(), v1.end());
    sort(v2.begin(), v2.end());
    int la, g, h;
    if(v1.size()) {
        tie(h, la) = v1[0];
        location[la] = v1[0].first + location[0];
        stype[la] = 2;
        for(int i = 1; i < v1.size(); i++) {
            g = ge(v1[i].second, la);
            if(g <= abs(h - v1[i].first)) {
                location[v1[i].second] = location[la] - g;
                stype[v1[i].second] = 1;
            }
            else {
                location[v1[i].second] = v1[i].first + location[0];
                stype[v1[i].second] = 2;
                tie(h, la) = v1[i];
            }
        }
    }
    if(v2.size()) {
        tie(h, la) = v2[0];
        location[la] = location[k] - v2[0].first; 
        stype[la] = 1;
        for(int i = 1; i < v2.size(); i++) {
            g = ge(v2[i].second, la);
            if(g <= abs(h - v2[i].first)) {
                location[v2[i].second] = location[la] + g;
                stype[v2[i].second] = 2;
            }
            else {
                location[v2[i].second] = location[k] - v2[i].first;
                stype[v2[i].second] = 1;
                tie(h, la) = v2[i];
            }
        }
    }
    return;
}

Compilation message

rail.cpp: In function 'void findLocation(int, int, int*, int*)':
rail.cpp:63:26: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   63 |         for(int i = 1; i < v1.size(); i++) {
      |                        ~~^~~~~~~~~~~
rail.cpp:80:26: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   80 |         for(int i = 1; i < v2.size(); i++) {
      |                        ~~^~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 0 ms 332 KB Output is correct
2 Correct 1 ms 332 KB Output is correct
3 Correct 1 ms 332 KB Output is correct
4 Correct 1 ms 372 KB Output is correct
5 Correct 1 ms 332 KB Output is correct
6 Correct 1 ms 332 KB Output is correct
7 Correct 1 ms 332 KB Output is correct
8 Correct 1 ms 332 KB Output is correct
9 Correct 1 ms 332 KB Output is correct
10 Correct 1 ms 380 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 332 KB Output is correct
2 Correct 1 ms 332 KB Output is correct
3 Correct 1 ms 372 KB Output is correct
4 Correct 1 ms 332 KB Output is correct
5 Correct 1 ms 332 KB Output is correct
6 Correct 1 ms 380 KB Output is correct
7 Correct 1 ms 332 KB Output is correct
8 Correct 1 ms 332 KB Output is correct
9 Correct 1 ms 332 KB Output is correct
10 Correct 1 ms 332 KB Output is correct
# Verdict Execution time Memory Grader output
1 Incorrect 78 ms 1476 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 77 ms 1468 KB Output isn't correct
2 Halted 0 ms 0 KB -