Submission #254278

#TimeUsernameProblemLanguageResultExecution timeMemory
254278b00n0rp철로 (IOI14_rail)C++17
0 / 100
311 ms98552 KiB
#include "rail.h" #include<bits/stdc++.h> using namespace std; #define pii pair<int,int> #define F first #define S second #define pb push_back #define REP(i,n) for(int i = 0; i < n; i ++) #define FOR(i,a,b) for(int i = a; i < b; i ++) #define all(v) v.begin(),v.end() int dist[5005][5005]; vector<pii> cees,dees; void findLocation(int N, int first, int location[], int stype[]){ REP(i,N){ dist[i][i] = 0; FOR(j,i+1,N){ dist[i][j] = getDistance(i,j); dist[j][i] = dist[i][j]; } } int mn = 1; FOR(i,2,N){ if(dist[0][mn] > dist[0][i]) mn = i; } location[0] = first; stype[0] = 1; location[mn] = first+dist[0][mn]; stype[mn] = 2; vector<pii> lft,rgt; FOR(i,1,N){ if(i != mn){ if(dist[0][i] > dist[0][mn]) lft.pb({dist[mn][i],i}); else rgt.pb({dist[0][i],i}); } } sort(all(lft)); sort(all(rgt)); int prevC = 0,prevD = mn; cees.pb({0,0}); dees.pb({location[mn],mn}); for(auto x:lft){ location[x.S] = location[prevC]+getDistance(prevC,x.S); stype[x.S] = 2; int closest = cees[lower_bound(all(cees),make_pair(-location[x.S],-1))-cees.begin()].S; if(location[x.S]-location[closest]+dist[1][closest] != dist[1][x.S]){ location[x.S] = location[mn]-dist[1][x.S]; stype[x.S] = 1; cees.pb({-location[x.S],x.S}); } } for(auto x:rgt){ location[x.S] = location[prevD]-getDistance(prevD,x.S); stype[x.S] = 1; int closest = dees[lower_bound(all(dees),make_pair(location[x.S],-1))-dees.begin()].S; if(location[closest]-location[x.S]+dist[0][closest] != dist[0][x.S]){ location[x.S] = location[0]+dist[0][x.S]; stype[x.S] = 2; dees.pb({location[x.S],x.S}); } } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...