Submission #477062

# Submission time Handle Problem Language Result Execution time Memory
477062 2021-09-30T05:12:34 Z qwerty1234 Mobile (BOI12_mobile) C++17
0 / 100
1000 ms 63860 KB
#include <bits/stdc++.h>

#define ll long long

using namespace std;

struct Bound {
	double left;
	double right;
	bool validLeft;
	bool validRight;
};

bool comp(Bound one, Bound two) {
	return one.right < two.right;
}

bool comparator(Bound one, Bound two) {
	return one.left < two.left;
}

bool check(double maxDist, vector<pair<double, double>> &transceivers, ll N, ll L) {
	vector<Bound> bounds;
	for (int i = 0; i < N; i++) {
		double ySquared = transceivers[i].second * transceivers[i].second;
		double hypoSquared = maxDist * maxDist;
		if (hypoSquared - ySquared < 0) {
			continue;
		}
		double x = sqrt(hypoSquared - ySquared);
		Bound toAdd;
		toAdd.left = max(transceivers[i].first - x, 0.0);
		toAdd.right = min(transceivers[i].first + x, (double)L);
		toAdd.validLeft = true;
		toAdd.validRight = true;
		if (x - transceivers[i].first > 0.0001) {
			toAdd.validLeft = false;
		}
		if (transceivers[i].first + x - (double)L > 0.0001) {
			toAdd.validRight = false;
		}
		bounds.push_back(toAdd);
	}
	sort(bounds.begin(), bounds.end(), comparator);
	if (bounds.size() == 0 || bounds[0].validLeft || bounds[bounds.size() - 1].validRight) {
		return true;
	}
	double right = bounds[0].right;
	for (int i = 1; i < (int)bounds.size(); i++) {
		if (bounds[i].left >= right && bounds[i].validLeft) {
			return true;
		}
		right = max(bounds[i].right, right);
	}
	sort(bounds.begin(), bounds.end(), comp);
	double front = bounds[bounds.size() - 1].left;
	for (int i = (int)bounds.size() - 1; i >= 0; i--) {
		if (bounds[i].right <= front && bounds[i].validRight) {
			return true;
		}
		front = min(bounds[i].left, front);
	}

	return false;
}

int main() {
	ll N, L;
	cin >> N >> L;
	vector<pair<double, double>> transceivers(N);
	for (int i = 0; i < N; i++) cin >> transceivers[i].first >> transceivers[i].second;
	double l = 0;
	double r = 1e20;
	double ans = 0;
	while (r - l >= 0.000001) {
		double mid = l + (r - l) / 2;
		// cout << l << ' ' << r << ' ' << mid << '\n';
		if (check(mid, transceivers, N, L)) {
			l = mid;
			ans = mid;
		} else {
			r = mid;
		}
	}
	printf("%0.7lf\n", ans);
}
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 292 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 2 ms 204 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 39 ms 508 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 93 ms 728 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 75 ms 736 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 60 ms 744 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 1086 ms 7124 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 1090 ms 7340 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 1081 ms 7700 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 1080 ms 8916 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 1087 ms 8976 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 1095 ms 36464 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 1084 ms 40428 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 1089 ms 53656 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 1081 ms 58252 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 1080 ms 58348 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 1091 ms 63860 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 1094 ms 63244 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 1087 ms 25980 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 1091 ms 49304 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 1080 ms 29620 KB Time limit exceeded
2 Halted 0 ms 0 KB -