Submission #556793

#TimeUsernameProblemLanguageResultExecution timeMemory
556793blueTowns (IOI15_towns)C++17
25 / 100
17 ms356 KiB
#include "towns.h"
#include <vector>
#include <cmath>
#include <set>
#include <iostream>
#include <cassert>
using namespace std;

namespace
{
	using vi = vector<int>;
}


int hubDistance(int N, int sub) 
{
	vi dist0(N);
	dist0[0] = 0;
	for(int i = 1; i < N; i++)
		dist0[i] = getDistance(0, i);

	int S = 0;
	for(int i = 1; i < N; i++)
		if(dist0[i] > dist0[S])
			S = i;

	int ST = 0; //diameter

	// cerr << "done\n";

	vi distS(N);
	distS[S] = 0;
	distS[0] = dist0[S];

	int T = 0;
	ST = distS[0];

	for(int i = 1; i < N; i++)
	{
		if(i != S)
		{
			distS[i] = getDistance(S, i);

			if(distS[i] > ST)
			{
				ST = distS[i];
				T = i;
			}
		}
	}

	// cerr << "S = " << S << "\n";


	vi S0_dist(N);
	for(int i = 0; i < N; i++)
		S0_dist[i] = (distS[i] + dist0[i] - distS[0])/2;

	vi xcoord(N);
	for(int i = 0; i < N; i++)
		xcoord[i] = distS[i] - S0_dist[i];

	int res = 5'000'000;

	int dist0_ST = (dist0[S] + dist0[T] - ST)/2;
	assert(2*(dist0[S] - dist0_ST) >= distS[T]);


	// assert((dist0[S] + getDistance(0, T) - distS[T]) <= distS[T])

	int best_coord = 0;
	for(int i = 0; i < N; i++)
	{
		if(2 * xcoord[i] > ST)
			res = min(res, xcoord[i]);
		else
			res = min(res, ST - xcoord[i]);

	}

	return res;

	return ST - best_coord;
}

Compilation message (stderr)

towns.cpp: In function 'int hubDistance(int, int)':
towns.cpp:15:28: warning: unused parameter 'sub' [-Wunused-parameter]
   15 | int hubDistance(int N, int sub)
      |                        ~~~~^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...