Submission #1016710

#TimeUsernameProblemLanguageResultExecution timeMemory
1016710serkanrashidRail (IOI14_rail)C++14
30 / 100
39 ms608 KiB
#include "rail.h" #include <bits/stdc++.h> using namespace std; const int maxn = 5005; set<int>used; int n,loc[maxn],sty[maxn]; set<int>valid; void nova_pochva(int i) { int ogr = -1; int di = 1e9; if(sty[i]==1) { auto it = used.find(loc[i]); it++; if(it!=used.end()) ogr = (*it); } if(sty[i]==2) { auto it = used.find(loc[i]); if(it!=used.begin()) { it--; ogr = (*it); } } if(ogr!=-1) di = abs(loc[i]-ogr); int minh = 0; int minch = 1e9; for(auto it = valid.begin(); it != valid.end(); it++) { int house = *it; int ch = getDistance(i,house); if(ch<minch) { minch = ch; minh = house; } } if(minch<di) { sty[minh] = 3 - sty[i]; loc[minh] = loc[i]; if(sty[i]==1) loc[minh] += minch; else loc[minh] -= minch; used.insert(loc[minh]); valid.erase(minh); nova_pochva(minh); } else nova_pochva(ogr); } void findLocation(int N, int first, int location[], int stype[]) { n = N; loc[0] = first; sty[0] = 1; if(n>1) { int mini = 0; int minch = 1e9; for(int i = 1; i < n; i++) { int ch = getDistance(0,i); if(ch<minch) { minch = ch; mini = i; } } loc[mini] = loc[0] + minch; sty[mini] = 2; for(int i = 1; i < n; i++) { if(i==mini) continue; int ch0 = getDistance(0,i); int ch1 = getDistance(mini,i); if(ch0>ch1) { sty[i] = 1; loc[i] = loc[mini] - ch1; } else { sty[i] = 2; loc[i] = loc[0] + ch0; } } } for(int i = 0; i < n; i++) location[i] = loc[i]; for(int i = 0; i < n; i++) stype[i] = sty[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...