Submission #603319

#TimeUsernameProblemLanguageResultExecution timeMemory
603319farhan132Rail (IOI14_rail)C++17
100 / 100
113 ms98804 KiB
#include "rail.h" #include <bits/stdc++.h> using namespace std; typedef int ll; typedef pair<ll , ll> ii; #define ff first #define ss second #define pb push_back #define in insert const ll N = 5005; ll dist[N][N]; ll D_(ll i, ll j){ if(i == j) return 0; if(dist[i][j] != -1) return dist[i][j]; dist[i][j] = dist[j][i] = getDistance(i, j); return dist[i][j]; } void findLocation(int n, int first, int location[], int stype[]){ memset(dist, -1, sizeof(dist)); ii mn = {1e9, 0}; location[0] = first; stype[0] = 1; if(n == 1) return; vector < ll > all; set < ii > C,D; for(ll i = 1; i < n; i++){ all.pb(i); } sort(all.begin(), all.end(),[&](ll i, ll j){ return D_(0, i) < D_(0, j); }); C.in({first, 0}); D.in({first + D_(0, all[0]), all[0]}); ll l = 0, r = all[0]; location[r] = first + D_(l, r); stype[r] = 2; for(auto i : all){ if(i == r) continue; // L i R (C) ll x = D_(l, i); ll y = D_(r, i); ll ex = location[r] - y; if(ex >= first){ auto [pos, j] = *D.lower_bound({ex, 0} ); if(pos != ex && x == pos - location[l] + pos - ex){ location[i] = ex; stype[i] = 1; // C C.in({location[i], i}); continue; } } // L i R (D) ex = location[l] + x; if(ex <= first){ auto [pos, j] = *(--C.upper_bound({ex, 1e9})); if(pos != ex && y == location[r] - pos + ex - pos){ location[i] = ex; stype[i] = 2; // D D.in({location[i], i}); continue; } } // L R i ll ex1 = location[l] + x; ll ex2 = location[r] - y; if((ex1 == location[0] + D_(0, i) && ex1 > location[r]) && (ex2 < location[l] && D_(0, i) == 2*location[all[0]] - location[0] - ex2)){ location[i] = ex2; stype[i] = 1; // C C.in({location[i], i}); l = i; }else if(ex1 == location[0] + D_(0, i) && ex1 > location[r]){ location[i] = ex1; stype[i] = 2; // D D.in({location[i], i}); r = i; }else{ location[i] = ex2; stype[i] = 1; // C C.in({location[i], i}); l = i; } } return; }

Compilation message (stderr)

rail.cpp: In function 'void findLocation(int, int, int*, int*)':
rail.cpp:30:5: warning: variable 'mn' set but not used [-Wunused-but-set-variable]
   30 |  ii mn = {1e9, 0};
      |     ^~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...