제출 #7543

#제출 시각아이디문제언어결과실행 시간메모리
7543baneling100철로 (IOI14_rail)C++98
100 / 100
148 ms2232 KiB
#include "rail.h" #include <algorithm> #include <vector> using namespace std; pair <int,int> A[5000]; vector <int> Up; vector <int> Down; int Check[5000]; void findLocation(int N, int First, int location[], int stype[]) { int i, j, k, Left, Right, Dist, OK; location[0]=First; stype[0]=1; for(i=1 ; i<N ; i++) A[i]=make_pair(getDistance(0,i),i); sort(A,A+N); location[A[1].second]=location[0]+A[1].first; stype[A[1].second]=2; for(i=2 ; i<N ; i++) { Dist=getDistance(A[1].second,A[i].second); if(A[i].first==A[1].first+Dist && location[A[1].second]-Dist<location[0]) Check[A[i].second]=Dist; } Right=A[1].second; Up.push_back(A[1].second); for(i=2 ; i<N ; i++) if(!Check[A[i].second]) { OK=1; Dist=getDistance(Right,A[i].second); k=Up.size(); for(j=0 ; j<k && OK ; j++) { if(A[i].first==(location[Up[j]]-location[0])+(Dist-(location[Right]-location[Up[j]]))) { location[A[i].second]=location[Right]-Dist; stype[A[i].second]=1; OK=0; } } if(OK) { location[A[i].second]=location[0]+A[i].first; stype[A[i].second]=2; Right=A[i].second; Up.push_back(A[i].second); } } Left=0; Down.push_back(0); for(i=2 ; i<N ; i++) if(Check[A[i].second]) { OK=1; Dist=getDistance(Left,A[i].second); k=Down.size(); for(j=0 ; j<k && OK ; j++) { if(Check[A[i].second]==(location[A[1].second]-location[Down[j]])+(Dist-(location[Down[j]]-location[Left]))) { location[A[i].second]=location[Left]+Dist; stype[A[i].second]=2; OK=0; } } if(OK) { location[A[i].second]=location[A[1].second]-Check[A[i].second]; stype[A[i].second]=1; Left=A[i].second; Down.push_back(A[i].second); } } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...