Submission #69481

#TimeUsernameProblemLanguageResultExecution timeMemory
69481E869120Rail (IOI14_rail)C++14
30 / 100
168 ms98880 KiB
#include "rail.h" #include <iostream> using namespace std; int p[100009], l[100009], dist[5009][5009]; int getDist(int a, int b) { if (a > b) swap(a, b); if (dist[a][b] != -1) return dist[a][b]; int ZZ = getDistance(a, b); dist[a][b] = ZZ; return ZZ; } void findLocation(int N, int first, int location[], int stype[]) { for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) dist[i][j] = -1; } // ----------------------------------- 一審 ----------------------------------------- int minx = (1 << 30), minid = 0; for (int i = 0; i < N; i++) { if (i == 0) continue; int z = getDist(0, i); if (z < minx) { minx = z; minid = i; } } l[minid] = minx; p[minid] = 2; l[0] = 0; p[0] = 1; // ----------------------------------- 二審 ----------------------------------------- for (int i = 0; i < N; i++) { if (i == 0 || i == minid) continue; if (getDist(0, i) == getDist(0, minid) + getDist(minid, i)) { int t1 = getDist(minid, i); l[i] = l[minid] - t1; p[i] = 1; } else if (getDist(minid, i) == getDist(minid, 0) + getDist(0, i)) { int t2 = getDist(0, i); l[i] = t2; p[i] = 2; } else if (getDist(i, minid) < getDist(i, 0)) p[i] = 3; else p[i] = 4; } // ----------------------------------- 終審 ----------------------------------------- int ret1 = 0, retm1 = 0; for (int i = 0; i < N; i++) { if (ret1 > l[i]) { ret1 = l[i]; retm1 = i; } } int ret2 = 0, retm2 = 0; for (int i = 0; i < N; i++) { if (ret2 < l[i]) { ret2 = l[i]; retm2 = i; } } for (int i = 0; i < N; i++) { if (p[i] == 3) { p[i] = 1; int z = getDist(retm1, i); l[i] = ret1 + z; } if (p[i] == 4) { p[i] = 2; int z = getDist(retm2, i); l[i] = ret2 - z; } } for (int i = 0; i < N; i++) location[i] = l[i] + first; for (int i = 0; i < N; i++) stype[i] = p[i]; return; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...