Submission #12198

#TimeUsernameProblemLanguageResultExecution timeMemory
12198qja0950Rail (IOI14_rail)C++98
30 / 100
106 ms704 KiB
#include "rail.h" #include <algorithm> #include <set> using namespace std; #define MAX_N 5005 struct FIRST{ int dis; int p; }First[MAX_N]; bool operator<(FIRST X, FIRST Y) { return X.dis < Y.dis; } set<int> C; set<int>::iterator it; void findLocation(int N, int first, int location[], int stype[]) { for(int i=1; i<N; i++) { First[i].dis = getDistance(0, i); First[i].p = i; } sort(First+1, First+N); stype[0] = 1; location[0] = first; int second = First[1].p; stype[second] = 2; location[second] = first + First[1].dis; int leftC = 0, rightD = second; C.insert(location[0]); for(int i=2; i<N; i++) { int nowp = First[i].p; int DisC = getDistance( leftC, nowp); int DisD = getDistance(rightD, nowp); int positionD = location[ leftC] + DisC; it = C.lower_bound(positionD); if(it != C.begin()) it--; int maxC = *it; if(location[rightD] - maxC + positionD - maxC == DisD) { stype[nowp] = 2; location[nowp] = positionD; }else{ int positionC = location[rightD] - DisD; stype[nowp] = 1; location[nowp] = positionC; } } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...