Submission #679367

#TimeUsernameProblemLanguageResultExecution timeMemory
679367Cross_RatioRail (IOI14_rail)C++14
0 / 100
77 ms884 KiB
#include <bits/stdc++.h> #include "rail.h" using namespace std; int N; int d1, d2; int dis[5005][2]; int p1, p2; void findLocation(int _N, int _f, int location[], int stype[]) { p1 = 0, d1 = _f; N = _N; stype[0] = 1; location[0] = d1; if(N==1) return; int i, j; for(i=1;i<N;i++) { dis[i][0] = getDistance(0, i); } int mi = 2e9; for(i=1;i<N;i++) { if(mi > dis[i][0]) { mi = dis[i][0]; p2 = i; } } d2 = d2 + dis[p2][0]; stype[p2] = 2; location[p2] = d2; // L (p1, d1) (p2, d2) R for(i=0;i<N;i++) { if(i==0) dis[i][1] = dis[1][0]; else if(i==p2) continue; else { dis[i][1] = getDistance(p2, i); } } int d = d2 - d1; vector<int> V1, V2; for(i=0;i<N;i++) { if(i==p1||i==p2) continue; assert(abs(dis[i][0] - dis[i][1])==d); if(dis[i][0] > dis[i][1]) { V1.push_back(i); } else { V2.push_back(i); } } while(V1.size()) { int mi = 2e9, pt = -1; for(int k : V1) { if(mi > dis[k][0]) { mi = dis[k][0]; pt = k; } } stype[pt] = 2; location[pt] = d1 + mi; vector<int> V; for(int k : V1) { int d = getDistance(pt, k); if(dis[k][0] == mi + d) { stype[k] = 1; location[k] = d1 + mi - d; } else V.push_back(k); } V1 = V; } while(V2.size()) { int mi = 2e9, pt = -1; for(int k : V2) { if(mi > dis[k][1]) { mi = dis[k][1], pt = k; } } stype[pt] = 1; location[pt] = d2 - mi; vector<int> V; for(int k : V2) { int d = getDistance(pt, k); if(dis[k][1]==mi + d) { stype[k] = 2; location[k] = d2 - mi + d; } else V.push_back(k); } V2 = V; } }

Compilation message (stderr)

rail.cpp: In function 'void findLocation(int, int, int*, int*)':
rail.cpp:14:12: warning: unused variable 'j' [-Wunused-variable]
   14 |     int i, j;
      |            ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...