Submission #477064

# Submission time Handle Problem Language Result Execution time Memory
477064 2021-09-30T05:16:04 Z qwerty1234 Mobile (BOI12_mobile) C++17
0 / 100
1000 ms 63944 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) {
			toAdd.validLeft = false;
		}
		if (transceivers[i].first + x - (double)L > 0) {
			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.0001) {
		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 204 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 32 ms 584 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 73 ms 684 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 58 ms 688 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 64 ms 692 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 1072 ms 6488 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 1053 ms 6528 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 1072 ms 6904 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 1085 ms 7400 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 1080 ms 7392 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 1087 ms 32112 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 1088 ms 32184 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 1061 ms 48436 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 1091 ms 48404 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 1068 ms 52236 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 1099 ms 52192 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 1087 ms 56248 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 1079 ms 37524 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 1076 ms 63944 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 1094 ms 15948 KB Time limit exceeded
2 Halted 0 ms 0 KB -