Submission #536432

#TimeUsernameProblemLanguageResultExecution timeMemory
536432KoDRail (IOI14_rail)C++17
100 / 100
87 ms844 KiB
#include "rail.h" #include <bits/stdc++.h> using std::vector; using std::pair; void findLocation(int N, int first, int location[], int stype[]) { vector<pair<int, int>> list(N - 1); for (int i = 1; i < N; ++i) { list[i - 1] = {getDistance(0, i), i}; } std::sort(list.begin(), list.end()); location[0] = first; stype[0] = 1; int L = 0, R = list[0].second; location[R] = location[0] + list[0].first; stype[R] = 2; std::map<int, int> map; map[location[L]] = 1; map[location[R]] = 2; for (int i = 1; i < N - 1; ++i) { const auto& [d0, id] = list[i]; const int dL = getDistance(L, id); const int dR = getDistance(R, id); const int m = (dL - dR + location[L] + location[R]) / 2; if (const auto itr = map.find(m); (itr == map.end() and m > location[0]) or (itr != map.end() and itr->second == 1)) { location[id] = location[L] + dL; stype[id] = 2; if (location[R] < location[id]) { R = id; } } else { location[id] = location[R] - dR; stype[id] = 1; if (location[L] > location[id]) { L = id; } } map[location[id]] = stype[id]; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...