Submission #348825

#TimeUsernameProblemLanguageResultExecution timeMemory
348825dennisstarRail (IOI14_rail)C++17
Compilation error
0 ms0 KiB
#include <bits/stdc++.h>
#include "rail.h"
#define eb emplace_back

using namespace std;

const int MX = 5e3 + 5;
const int INF = 1e9;

int L[MX], *T, D[2][MX];
int X;

int nn, cnt;
int gd(int s, int e) {
	cnt++;
	assert(cnt<=3*(nn-1));
	if (s==e) return 0;
	return getDistance(s, e);
}

void sol1(vector<int> l) {
	sort(l.begin(), l.end(), [&](int x, int y) { return D[1][x]<D[1][y]; });
	int lst=0;
	vector<int> v={X, 0};
	for (auto &i:l) {
		int d=gd(i, lst), fl=0;
		for (int j=1; j<v.size(); j++)
			if (L[v[j-1]]>L[lst]-d&&L[lst]-d>L[v[j]]&&D[1][i]==D[1][v[j]]+d+(L[lst]-L[v[j]])) {
				fl=1;
				break;
			}
		if (fl) {
			L[i]=L[lst]+d;
			T[i]=2;
		}
		else {
			L[i]=L[X]-D[1][i];
			T[i]=1;
			lst=i;
			v.eb(i);
		}
	}
}
void sol2(vector<int> r) {
	sort(r.begin(), r.end(), [&](int x, int y) { return D[0][x]<D[0][y]; });
	int lst=X;
	vector<int> v={0, X};
	for (auto &i:r) {
		int d=gd(i, lst), fl=0;
		for (int j=1; j<v.size(); j++)
			if (L[v[j-1]]<L[lst]-d&&L[lst]-d<L[v[j]]&&D[0][i]==D[0][v[j]]+d-(L[lst]-L[v[j]])) {
				fl=1;
				break;
			}
		if (fl) {
			L[i]=L[lst]-d;
			T[i]=1;
		}
		else {
			L[i]=D[0][i];
			T[i]=2;
			lst=i;
			v.eb(i);
		}
	}
}

void findLocation(int N, int first, int location[], int stype[]) {
	nn=N;
	T=stype;
	T[0]=1;
	
	int mn=INF;
	for (int i=1; i<N; i++) {
		D[0][i]=gd(0, i);
		if (mn>D[0][i]) mn=D[0][i], X=i;
	}
	T[X]=2;
	L[X]=mn;
	for (int i=1; i<N; i++) if (i!=X) {
		D[1][i]=gd(X, i);
		if (mn>D[1][i]) mn=D[1][i];
	}
	
	vector<int> l, m, r;
	for (int i=1; i<N; i++) if (i!=X) {
		if (D[0][i]==D[1][i]+L[X]) {
			if (D[1][i]<L[X]) m.eb(i);
			else l.eb(i);
		}
		else if (D[0][i]-L[X]==D[1][i]-2*mn) r.eb(i);
	}

	for (auto &i:m) L[i]=L[X]-D[1][i], T[i]=1;
	sol1(l);
	sol2(r);

	for (int i=0; i<N; i++) location[i]=L[i]+first;
}

Compilation message (stderr)

rail.cpp: In function 'void sol1(std::vector<int>)':
rail.cpp:27:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   27 |   for (int j=1; j<v.size(); j++)
      |                 ~^~~~~~~~~
rail.cpp: In function 'void sol2(std::vector<int>)':
rail.cpp:50:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   50 |   for (int j=1; j<v.size(); j++)
      |                 ~^~~~~~~~~
/tmp/ccSU3Uxn.o:(.bss+0x0): multiple definition of `cnt'
/tmp/ccUFXs4K.o:(.bss+0x0): first defined here
collect2: error: ld returned 1 exit status