Submission #1357066

#TimeUsernameProblemLanguageResultExecution timeMemory
1357066enzyTowns (IOI15_towns)C++20
25 / 100
6 ms456 KiB
#include "towns.h"
#include<bits/stdc++.h>
using namespace std;
const int inf=1e9+7;

int hubDistance(int n, int sub){
	int best=0, id=0;
	for(int i=1;i<n;i++){
		int at=getDistance(0,i);
		if(at>best){
			best=at;
			id=i;
		}
	}
	vector<int>d1(n), d2(n);
	for(int i=0;i<n;i++) d1[i]=getDistance(id,i);
	int f1=id, f2=0; best=0;
	for(int i=0;i<n;i++){
		if(d1[i]>best){
			best=d1[i];
			f2=i;
		}
	}
	for(int i=0;i<n;i++) d2[i]=getDistance(f2,i);
	int r=inf;
	for(int i=0;i<n;i++){
		int x=abs(d1[i]-d2[i])+best;
		r=min(r,x/2);
	}

	auto solve4=[&](){
		int e=1, m=0, d=1;
		for(int i=0;i<n;i++){
			if(i==f1||i==f2) continue;
			int x=(d1[i]-d2[i])+best; x/=2;
			if(x<r) e++;
			if(x==r) m++;
			if(x>r) d++;
		}
		if(max({e,m,d})<=(n/2)) return r;
		return -r;
	};

	if(sub==4) return solve4();

	return r;
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...