Submission #236232

#TimeUsernameProblemLanguageResultExecution timeMemory
236232BilyanaRail (IOI14_rail)C++17
0 / 100
84 ms512 KiB
#include <bits/stdc++.h> //#include "grader.h" #include "rail.h" using namespace std; const int MAXN = 5000 + 100; const int MAXA = 1e6 + 100; int dist[MAXN], wh[MAXN]; bool ch[MAXN]; int h[MAXA]; struct cmp { bool operator()(int l, int r) { return dist[l] < dist[r]; } }; void findLocation(int n, int first, int location[], int stype[]) { location[0] = first; h[first] = 1; stype[0] = 1; dist[0] = 0; wh[0] = 0; for (int i=1; i<n; i++) { dist[i] = getDistance(0, i); wh[i] = i; } sort(wh, wh+n, cmp()); int l = 0, r = 0; if (n > 1) { location[wh[1]] = first + dist[wh[1]]; stype[wh[1]] = 2; } for (int i=2; i<n; i++) { h[location[wh[i-1]]] = stype[wh[i-1]]; if (location[wh[i-1]] < location[l]) { l = wh[i-1]; } if (location[wh[i-1]] > location[r]) { r = wh[i-1]; } int ld = getDistance(l, wh[i]); int rd = getDistance(r, wh[i]); //cerr<<wh[i]<<" - "<<l<<' '<<r<<" - "<<location[l]<<' '<<location[r]<<" - "<<ld<<' '<<rd<<endl; int temp = location[l] + ld; int temp2 = temp - (rd - (location[r] - temp)) / 2; int temp3 = temp + (rd - (temp - location[r])) / 2; if (temp >= 0 && ((temp < location[r] && temp2 >= 0 && h[temp2] == 1) || (temp > location[r] && temp < MAXA && temp3 >= 0 && h[temp3] == 1))) { //cerr<<1<<endl; location[wh[i]] = temp; stype[wh[i]] = 2; continue; } temp = location[r] - rd; temp2 = temp + (ld - (temp - location[l])) / 2; temp3 = temp - (ld - (location[l] - temp)) / 2; if (temp >= 0 && ((temp > location[l] && temp2 >= 0 && h[temp2] == 2) || (temp < location[l] && temp3 >= 0 && h[temp3] == 2))) { //cerr<<2<<endl; location[wh[i]] = temp; stype[wh[i]] = 1; continue; } } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...