Submission #835323

#TimeUsernameProblemLanguageResultExecution timeMemory
835323LiudasRail (IOI14_rail)C++17
100 / 100
52 ms872 KiB
#include "rail.h" #include <set> #include <vector> #include <numeric> #include <algorithm> #include <iostream> #include <map> using namespace std; void findLocation(int N, int first, int location[], int stype[]) { int lid = 0, rid = -1; vector<int> dist(N); for(int i = 0; i < N; i ++){ if(i == lid)continue; int temp = getDistance(lid, i); dist[i] = temp; } vector<int> order(N); iota(order.begin(), order.end(), 0); sort(order.begin(), order.end(), [&](int a, int b){return dist[a] < dist[b];}); rid = order[1]; lid = order[0]; stype[order[0]] = 1; stype[order[1]] = 2; location[order[0]] = first; location[order[1]] = first + dist[rid]; map<int, int> at; at[location[order[0]]] = order[0]; at[location[order[1]]] = order[1]; for(int i : order){ if(stype[i])continue; int t1 = getDistance(i, lid); int t2 = getDistance(i, rid); int push = (location[lid] + location[rid] + t1 - t2)/2; int last = at.find(push) == at.end() ? (push > first ? 1 : 2) : stype[at[push]]; if(last == 1){ stype[i] = 2; location[i] = location[lid] + t1; if(location[i] > location[rid])rid = i; } else{ stype[i] = 1; location[i] = location[rid] - t2; if(location[i] < location[lid])lid = i; } at[location[i]] = i; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...