Submission #115403

#TimeUsernameProblemLanguageResultExecution timeMemory
115403faustaadpRail (IOI14_rail)C++17
30 / 100
1737 ms262144 KiB
#include "rail.h"
#include<bits/stdc++.h>
typedef long long ll;
#define pb push_back
#define mp make_pair
#define fi first
#define se second
using namespace std;
int i,d[5050][5050],cal,j;
pair<int,int> A[5050][5050];
vector<pair<int,int> > isi;
int pos[5050];
int tipe[5050];
int z[5050];
void findLocation(int N, int first, int location[], int stype[])
{
	//if(N>100)
	//	while(1);
	pos[0]=first;
	tipe[0]=1;
//	if(N==1)
//		return ;
	for(i=0;i<N;i++)
		for(j=i+1;j<N;j++)
		{
			d[i][j]=getDistance(i,j);
			d[j][i]=d[i][j];
		}
	for(i=0;i<N;i++)
	{
		for(j=0;j<N;j++)
			A[i][j]=mp(d[i][j],j);
		sort(A[i],A[i]+N);
	//	cout<<i<<" "<<A[i][1].se<<"()\n";
	}
	for(i=0;i<N;i++)
		for(j=i+1;j<N;j++)
			if(A[i][1].se==j&&A[j][1].se==i)
				isi.pb(mp(i,j));
	for(i=0;i<isi.size();i++)
	{
		if(isi[i].fi==A[0][1].se||isi[i].se==A[0][1].se)
		{
			if(isi[i].fi==A[0][1].se)
				swap(isi[i].fi,isi[i].se);
			swap(isi[0],isi[i]);
			break;
		}
	}
	tipe[isi[0].fi]=1;
	tipe[isi[0].se]=2;

	pos[isi[0].se]=pos[0]+d[0][isi[0].se];
	pos[isi[0].fi]=pos[isi[0].se]-d[isi[0].se][isi[0].fi];
	for(i=1;i<isi.size();i++)
	{
	//	cout<<"( <3 ) "<<isi[i].fi<<" "<<isi[i].se<<"\n";
	//	x[0][pas]+
		if(d[isi[0].fi][isi[i].fi]==(d[isi[0].fi][isi[0].se]+d[isi[0].se][isi[i].fi]))
		{
			if(d[isi[0].fi][isi[i].fi]>d[isi[0].fi][isi[i].se])
				swap(isi[i].fi,isi[i].se);
			pos[isi[i].fi]=pos[isi[0].se]-d[isi[0].se][isi[i].fi];
			pos[isi[i].se]=pos[isi[i].fi]+d[isi[i].se][isi[i].fi];
		}
		else
		{
			if(d[isi[0].fi][isi[i].fi]<d[isi[0].fi][isi[i].se])
				swap(isi[i].fi,isi[i].se);
			pos[isi[i].se]=pos[isi[0].fi]+d[isi[0].fi][isi[i].se];
			pos[isi[i].fi]=pos[isi[i].se]-d[isi[i].se][isi[i].fi];
		}
		tipe[isi[i].fi]=1;
		tipe[isi[i].se]=2;
	}
	for(i=0;i<isi.size();i++)
	{
		z[isi[i].fi]=1;
		z[isi[i].se]=1;
	//	cout<<isi[i].fi<<" "<<isi[i].se<<"_\n";
	}
	for(i=0;i<isi.size();i++)
	{
		//break;
		for(j=0;j<N;j++)
		{
			if(z[j])continue;
			if(A[j][1].se==isi[i].se)
			{
				tipe[j]=1;
				pos[j]=pos[isi[i].se]-d[j][isi[i].se];
			}
		}
		for(j=0;j<N;j++)
		{
			if(z[j])continue;
			if(A[j][1].se==isi[i].fi)
			{
				tipe[j]=2;
				pos[j]=pos[isi[i].fi]+d[j][isi[i].fi];
			}
		}
		//cout<<"( <3 )\n"<<isi[i].fi<<" "<<isi[i].se<<"\n";
		//cout<<pos[isi[i].fi]<<" "<<pos[isi[i].se]<<"\n";
		//cout<<"\n";
	}
	for(i=0;i<N;i++)
	{
	//	cout<<i<<"  "<<tipe[i]<<" "<<pos[i]<<"\n";
		location[i]=pos[i];
		stype[i]=tipe[i];
	}
}	
	

Compilation message (stderr)

rail.cpp: In function 'void findLocation(int, int, int*, int*)':
rail.cpp:40:11: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(i=0;i<isi.size();i++)
          ~^~~~~~~~~~~
rail.cpp:55:11: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(i=1;i<isi.size();i++)
          ~^~~~~~~~~~~
rail.cpp:76:11: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(i=0;i<isi.size();i++)
          ~^~~~~~~~~~~
rail.cpp:82:11: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(i=0;i<isi.size();i++)
          ~^~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...