Submission #260701

#TimeUsernameProblemLanguageResultExecution timeMemory
260701A02Rail (IOI14_rail)C++14
30 / 100
156 ms98556 KiB
#include "rail.h"
#include <iostream>
#include <vector>
#include <algorithm>
#include <utility>
#include <set>

using namespace std;

vector<vector<int> > distances;

int gdistance(int i, int j){

    if (i == j){
        distances[i][i] = 0;
    }

    if (distances[i][j] == -1){
        distances[i][j] = getDistance(i, j);
        distances[j][i] = distances[i][j];
    }

    return distances[i][j];
}

void findLocation(int N, int first, int location[], int stype[])
{

    distances = vector<vector<int> > (N, vector<int> (N, -1));

    for (int i = 0; i < N; i++){
        location[i] = -1;
        stype[i] = -1;
    }

    stype[0] = 1;
    location[0] = first;


    vector<int> d0 (N, -1);

    d0[0] = 0;

    for (int i = 1; i < N; i++){
        d0[i] = gdistance(0, i);
    }

    int x = distance(d0.begin(), min_element(++d0.begin(), d0.end()));

    location[x] = location[0] + d0[x];
    stype[x] = 2;

    for (int i = 0; i < N; i++){
        if (i != 0 && i != x){
            if (gdistance(0, i) == gdistance(x, i) + gdistance(0, x)){
                stype[i] = 1;
                location[i] = location[x] - gdistance(i, x);
            } else {
                stype[i] = 2;
                location[i] = location[0] + gdistance(0, i);
            }
            //cout << i << ' ' << location[i] << ' ' << stype[i] << endl;
        }
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...