Submission #640248

#TimeUsernameProblemLanguageResultExecution timeMemory
640248ggohTowns (IOI15_towns)C++14
35 / 100
22 ms400 KiB
#include "towns.h"
#include<bits/stdc++.h>
using namespace std;
#define sz(v) ((int)(v).size())
typedef long long lint;

int dis[111][111];
int hubDistance(int N, int sub) {
	int maxi=-1,maxj=-1,maxx=-1;
	int R=1e9;
	for(int i=1;i<N;i++)
	{
		dis[0][i]=dis[i][0]=getDistance(0,i);
		if(dis[0][i]>maxx)
		{
			maxx=dis[0][i];
			maxi=i;
		}
	}
	maxx=-1;
	for(int i=0;i<N;i++)
	{
		if(i!=maxi)
		{
			dis[maxi][i]=dis[i][maxi]=getDistance(maxi,i);
			if(dis[maxi][i]>maxx)
			{
				maxx=dis[maxi][i];
				maxj=i;
			}
		}
	}
	vector<int>X;
	for(int i=0;i<N;i++)
	{
		if(i!=maxi && i!=maxj)
		{
			dis[maxj][i]=dis[i][maxj]=getDistance(maxj,i);
			X.push_back((dis[maxi][i]-dis[maxj][i]+maxx)/2);
		}
	}
	sort(X.begin(),X.end());
	for(auto &k:X)
	{
		R=min(R,max(maxx-k,k));
	}
	int ch=-1;
	int cnt[3];
	for(int i=0;i<3;i++)cnt[i]=0;
	cnt[0]=cnt[2]=1;
	for(auto &k:X)
	{
		if(k<R)cnt[0]++;
		else if(k==R)cnt[1]++;
		else cnt[2]++;
	}
	if(cnt[0]<=N/2 && cnt[1]<=N/2 && cnt[2]<=N/2)ch=1;
	for(int i=0;i<3;i++)cnt[i]=0;
	cnt[0]=cnt[2]=1;
	for(auto &k:X)
	{
		if(k<maxx-R)cnt[0]++;
		else if(k==maxx-R)cnt[1]++;
		else cnt[2]++;
	}
	if(cnt[0]<=N/2 && cnt[1]<=N/2 && cnt[2]<=N/2)ch=1;


	return ch*R;
}

Compilation message (stderr)

towns.cpp: In function 'int hubDistance(int, int)':
towns.cpp:8:28: warning: unused parameter 'sub' [-Wunused-parameter]
    8 | 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...