Submission #585651

#TimeUsernameProblemLanguageResultExecution timeMemory
585651SeDunionRail (IOI14_rail)C++17
30 / 100
73 ms572 KiB
#include "rail.h" #include<iostream> #include<set> #include<vector> using namespace std; const int N = 5055; const int inf = 1e9; int da[N], db[N]; int a = -1, b = -1; int ask(int x, int y) { if (x == y) return 0; if (x == a) return da[y]; if (x == b) return db[y]; return getDistance(x, y); } int n; void findLocation(int N, int first, int location[], int stype[]) { n = N; a = 0; stype[0] = 1, location[0] = first; for (int i = 0 ; i < n ; ++ i) { if (i == a) continue; da[i] = getDistance(a, i); } int mn = inf; for (int i = 0 ; i < n ; ++ i) { if (i == a) continue; if (mn > da[i]) { mn = da[i]; b = i; } } for (int i = 0 ; i < n ; ++ i) { if (i == a || i == b) continue; db[i] = getDistance(b, i); } stype[b] = 2, location[b] = location[a] + da[b]; vector<int>left, right; for (int i = 0 ; i < n ; ++ i) { if (i == a || i == b) { continue; } if (da[i] < db[i]) { right.emplace_back(i); } else { left.emplace_back(i); } } for (int i : left) { location[i] = location[b] - db[i]; if (getDistance(i, b) == db[i]) { stype[i] = 1; } else { stype[i] = 2; } } for (int i : right) { location[i] = location[a] + da[i]; if (getDistance(i, a) == da[i]) { stype[i] = 2; } else { 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...