Submission #1152607

#TimeUsernameProblemLanguageResultExecution timeMemory
1152607justin271828Odašiljači (COCI20_odasiljaci)C++17
35 / 70
425 ms456 KiB
#include <bits/stdc++.h>
using namespace std;

#define double long double

const double epsilon = 1.000'000'000'000'1;

double sq(double x) {return x*x;}

int main() {
	int n;
	cin >> n;
	double x[n];
	double y[n];
	for (int i = 0; i < n; i++) cin >> x[i] >> y[i];
	double ans = 1234567890.0;
	double lo = 0;
	double hi = ans;
	double mid;
	bool v[n];
	while (true) {
		mid = (lo+hi)/2;
		queue<int> q;
		q.push(0);
		memset(v, false, sizeof(v));
		v[0] = true;
		while (!q.empty()) {
			int temp = q.front();
			for (int i = 0; i < n; i++) {
				if (i == temp) continue;
				if (sq(mid) < sq(x[temp]-x[i])+sq(y[temp]-y[i])) continue;
				if (v[i]) continue;
				v[i] = true;
				q.push(i);}
			q.pop();}
		bool less = true;
		for (bool b: v) less = (less && b);
		q.push(0);
		memset(v, false, sizeof(v));
		v[0] = true;
		while (!q.empty()) {
			int temp = q.front();
			for (int i = 0; i < n; i++) {
				if (i == temp) continue;
				if (sq(mid*epsilon) < sq(x[temp]-x[i])+sq(y[temp]-y[i])) continue;
				if (v[i]) continue;
				v[i] = true;
				q.push(i);}
			q.pop();}
		bool more = true;
		for (bool b: v) more = (more && b);
		if (less) hi = mid/epsilon;
		else if (!more) lo = mid*epsilon;
		else break;}
	cout << mid/2;
	return 0;}
#Verdict Execution timeMemoryGrader output
Fetching results...