Submission #296214

#TimeUsernameProblemLanguageResultExecution timeMemory
296214dsjongRail (IOI14_rail)C++14
56 / 100
561 ms98680 KiB
#include "rail.h"
#include <bits/stdc++.h>
using namespace std;
#define pii pair<int, int>
#define F first
#define S second
int dist[5005][5005];
int INF=1e9;
int d(int x, int y){
	if(dist[x][y]!=0) return dist[x][y];
	return dist[x][y]=dist[y][x]=getDistance(x, y);
}
void findLocation(int N, int una, int location[], int stype[]){
	stype[0]=1;
	location[0]=una;
	pii mini={1e9, -1};
	for(int i=1;i<N;i++){
		mini=min(mini, {d(0, i), i});
	}
	int x=mini.S;
	location[x]=location[0]+mini.F;
	stype[x]=2;
	vector<pii>L, R;
	for(int i=1;i<N;i++){
		if(i!=x){
			if(d(0, x)+d(x, i)==d(0, i)) L.push_back({d(0, i), i});
			else R.push_back({d(0, i), i});
		}
	}
	sort(L.begin(), L.end());
	sort(R.begin(), R.end());
	vector<int>cur;
	for(int i=0;i<R.size();i++){
		int y=R[i].S, idx;
		bool b=false;
		for(int j:cur){
			if(d(0, y)==d(0, j)+d(j, y)){
				b=true;
				idx=j;
			}
		}
		if(!b){
			stype[y]=2;
			location[y]=location[0]+d(0, y);
			cur.push_back(y);
		}
		else{
			stype[y]=1;
			location[y]=location[idx]-d(idx, y);
		}
	}
	cur.clear();
	for(int i=0;i<L.size();i++){
		int y=L[i].S, idx;
		bool b=false;
		for(int j:cur){
			if(d(x, y)==d(x, j)+d(j, y)){
				b=true;
				idx=j;
			}
		}
		if(!b){
			stype[y]=1;
			location[y]=location[x]-d(x, y);
			cur.push_back(y);
		}
		else{
			stype[y]=2;
			location[y]=location[idx]+d(idx, y);
		}
	}
	/*for(int i=0;i<N;i++){
		cout<<stype[i]<<" "<<location[i]<<endl;
	}*/
}

Compilation message (stderr)

rail.cpp: In function 'void findLocation(int, int, int*, int*)':
rail.cpp:33:15: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   33 |  for(int i=0;i<R.size();i++){
      |              ~^~~~~~~~~
rail.cpp:53:15: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   53 |  for(int i=0;i<L.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...