제출 #556810

#제출 시각아이디문제언어결과실행 시간메모리
556810blue도시들 (IOI15_towns)C++17
컴파일 에러
0 ms0 KiB
#include "towns.h"
#include <vector>
#include <cmath>
#include <set>
#include <iostream>
#include <cassert>
using namespace std;

namespace
{
	using vi = vector<int>;
	#define sz(x) int(x.size())



	int ST, best_coord;
	vi xcoord;
	int S;
	vi distS;

}



int best_dist(int i)
{
	int distTi = getDistance(i, T);

	int height = (distS[i] + distTi - ST)/2;

	return height + abs(xcoord[i] - best_coord);
}

int areequal(int i, int j)
{
	return getDistance(i, j) == getDistance(i, best_coord) + getDistance(best_coord, j);

}


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

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

	ST = 0; //diameter

	// cerr << "done\n";

	distS = vi(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;

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


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

	int ST_0coord = dist0[S] - dist0_ST;

	assert(2*ST_0coord >= distS[T]);


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

	int res = 5'000'000;
	set<int> best_coords;


	for(int i = 0; i < N; i++)
	{
		if(xcoord[i] > ST_0coord) 
			continue;

		int curr = max(xcoord[i], ST - xcoord[i]);

		if(curr < res)
		{
			res = curr;
			best_coords.clear();
		}

		if(curr == res)
		{
			best_coords.insert(xcoord[i]);
		}

	}


	if(sz(best_coords) == 1)
	{
		best_coord = *best_coords.begin();
	}
	else
	{
		int leftcount = 0;
		for(int i = 0; i < N; i++)
		{
			if(xcoord[i] <= *best_coords.begin())
				leftcount++;
		}

		if(2*leftcount >= N)
			best_coord = *best_coords.begin();
		else 
			best_coord = *best_coords.rbegin();
	}

	// bool balanced = 1;

	// for(int i = 0; i < N/2; i++)
	// {
	// 	int ct = 0;
	// 	for(int j = i+1; j < N; j++)
	// 	{
	// 		if()
	// 	}

	// }

	// int R = res;



	return R;
}

컴파일 시 표준 에러 (stderr) 메시지

towns.cpp: In function 'int best_dist(int)':
towns.cpp:27:30: error: 'T' was not declared in this scope
   27 |  int distTi = getDistance(i, T);
      |                              ^
towns.cpp: In function 'int hubDistance(int, int)':
towns.cpp:159:9: error: 'R' was not declared in this scope
  159 |  return R;
      |         ^
towns.cpp:41:28: warning: unused parameter 'sub' [-Wunused-parameter]
   41 | int hubDistance(int N, int sub)
      |                        ~~~~^~~