Submission #64512

#TimeUsernameProblemLanguageResultExecution timeMemory
64512TadijaSebezRail (IOI14_rail)C++11
100 / 100
160 ms32252 KiB
#include "rail.h" #include <stdio.h> #include <vector> #include <algorithm> #include <map> using namespace std; #define pb push_back const int N=5050; int dist[N][N]; int Get(int i, int j) { if(i>j) return Get(j,i); if(dist[i][j]) return dist[i][j]; return dist[i][j]=getDistance(i,j); } map<int,int> dir; int fir=1; bool comp1(int i, int j){ return Get(0,i)<Get(0,j);} bool comp2(int i, int j){ return Get(fir,i)<Get(fir,j);} void findLocation(int n, int st, int d[], int t[]) { d[0]=st; t[0]=1; dir[d[0]]=t[0]; if(n==1) return; int i,j;fir=1; vector<int> left,right; for(i=2;i<n;i++) if(Get(0,fir)>Get(0,i)) fir=i; d[fir]=st+Get(0,fir); t[fir]=2; dir[d[fir]]=t[fir]; for(i=1;i<n;i++) { if(i==fir) continue; if(Get(0,i)==d[fir]-d[0]+Get(fir,i)) { if(d[fir]-d[0]>Get(fir,i)) { t[i]=1; d[i]=d[fir]-Get(fir,i); dir[d[i]]=t[i]; } else left.pb(i); } else right.pb(i); } sort(left.begin(),left.end(),comp2); sort(right.begin(),right.end(),comp1); int l=0,r=fir; for(i=0;i<left.size();i++) { int x=left[i]; int val=(d[r]-d[l]+Get(l,x)-Get(r,x))/2; if(dir[d[l]+val]==1) { d[x]=d[l]+Get(l,x); t[x]=2; dir[d[x]]=t[x]; } else { d[x]=d[r]-Get(r,x); t[x]=1; dir[d[x]]=t[x]; l=x; } } l=0;r=fir; for(i=0;i<right.size();i++) { int x=right[i]; int val=(d[r]-d[l]+Get(r,x)-Get(l,x))/2; if(dir[d[r]-val]==2) { d[x]=d[r]-Get(r,x); t[x]=1; dir[d[x]]=t[x]; } else { d[x]=d[l]+Get(l,x); t[x]=2; dir[d[x]]=t[x]; r=x; } } }

Compilation message (stderr)

rail.cpp: In function 'void findLocation(int, int, int*, int*)':
rail.cpp:50:11: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(i=0;i<left.size();i++)
          ~^~~~~~~~~~~~
rail.cpp:69:11: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(i=0;i<right.size();i++)
          ~^~~~~~~~~~~~~
rail.cpp:26:8: warning: unused variable 'j' [-Wunused-variable]
  int i,j;fir=1;
        ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...