# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
14724 | gs13068 | 철로 (IOI14_rail) | C++98 | 0 ms | 0 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
//#include "rail.h"
#include <algorithm>
int getDistance(int,int);
std::pair<int,int> a[5555];
void findLocation(int n,int fir,int loc[],int stp[])
{
int i,j,k,l,r,ld,rd;
loc[0]=fir;
stp[0]=1;
if(n==1)return;
a[0].first=0;
a[0].second=0;
for(i=1;i<n;i++)
{
a[i].first=getDistance(0,i);
a[i].second=i;
}
std::sort(a+1,a+n);
loc[a[1].second]=loc[0]+a[1].first;
stp[a[1].second]=2;
l=0;r=a[1].second;
for(i=2;i<n;i++)
{
ld=getDistance(l,a[i].second);
rd=getDistance(r,a[i].second);
for(j=0;j<i;j++)if(stp[a[j].second]==1&&loc[a[j].second]<loc[l]+ld&&loc[r]-loc[a[j].second]+loc[l]+ld-loc[a[j].second]==rd)break;
if(j<i)
{
loc[a[i].second]=loc[l]+ld;
stp[a[i].second]=2;
}
else
{
loc[a[i].second]=loc[r]-rd;
stp[a[i].second]=1;
}
}
}