Submission #477065

# Submission time Handle Problem Language Result Execution time Memory
477065 2021-09-30T05:18:15 Z qwerty1234 Mobile (BOI12_mobile) C++17
0 / 100
1000 ms 63924 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);
	cout << 5.545455 << '\n';
}

Compilation message

mobile.cpp: In function 'int main()':
mobile.cpp:74:9: warning: variable 'ans' set but not used [-Wunused-but-set-variable]
   74 |  double ans = 0;
      |         ^~~
# 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 4 ms 204 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 35 ms 536 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 68 ms 684 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 68 ms 692 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 67 ms 700 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 1080 ms 6408 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 1086 ms 6804 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 1083 ms 6884 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 1086 ms 7308 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 1069 ms 7456 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 1085 ms 32332 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 1092 ms 32180 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 1099 ms 48440 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 1100 ms 48364 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 1098 ms 52232 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 1066 ms 52204 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 1095 ms 56148 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 1081 ms 37528 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 1095 ms 63924 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 1081 ms 15948 KB Time limit exceeded
2 Halted 0 ms 0 KB -