Submission #366840

#TimeUsernameProblemLanguageResultExecution timeMemory
366840KoD철로 (IOI14_rail)C++17
30 / 100
85 ms876 KiB
#include <bits/stdc++.h>
#ifndef __APPLE__
#include "rail.h"
#endif

template <class T>
using Vec = std::vector<T>;

void findLocation(int n, int first, int location[], int stype[]) {
    assert(n <= 100);
    Vec<Vec<int>> memo(n, Vec<int>(n, -1));
    for (int i = 0; i < n; ++i) {
        memo[i][i] = 0;
    }
    const auto ask = [&](const int i, const int j) {
        if (memo[i][j] == -1) {
            memo[i][j] = memo[j][i] = getDistance(i, j);
        }
        return memo[i][j];
    };
    int select = n;
    for (int i = 1; i < n; ++i) {
        if (select == n || ask(0, i) < ask(0, select)) {
            select = i;
        }
    }
    location[0] = first;
    stype[0] = 1;
    location[select] = location[0] + ask(0, select);
    stype[select] = 2;
    Vec<int> west, east;
    for (int i = 1; i < n; ++i) {
        if (i != select) {
            if (ask(0, i) < ask(select, i)) {
                east.push_back(i);
            } 
            else {
                west.push_back(i);
            }
        }
    }
    for (const auto i: east) {
        location[i] = location[0] + ask(0, i);
        stype[i] = 2;
    }
    for (const auto i: west) {
        location[i] = location[select] - ask(select, i);
        stype[i] = 1;
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...