#include <bits/stdc++.h>
using namespace std;
const double eps = 1e-4, max_sq = 4e18 + 1;
inline bool cmp_less(const double &a, const double &b) {
return a + eps < b;
}
inline bool cmp_equal(const double &a, const double &b) {
return abs(a - b) < eps;
}
inline bool cmp_less_equal(const double &a, const double &b) {
return cmp_less(a, b) || cmp_equal(a, b);
}
inline bool cmp_cor(const pair<double, double> &p1, const pair<double, double> &p2) {
return cmp_less(p1.first - sqrt(max_sq - p1.second * p1.second), p2.first - sqrt(max_sq - p2.second * p2.second));
}
int main() {
int n;
double len;
cin >> n >> len;
vector<pair<double, double>> cor(n);
for (int i = 0; i < n; i++)
cin >> cor[i].first >> cor[i].second;
sort(cor.begin(), cor.end(), cmp_cor);
double l = 0, r = 1e10, m;
while (cmp_less(l, r)) {
m = (l + r) / 2;
vector<pair<double, double>> range, real_range;
for (int i = 0; i < n; i++) {
if (!cmp_less_equal(m, abs(cor[i].second))) {
double dx = sqrt(m * m - cor[i].second * cor[i].second);
range.push_back({cor[i].first - dx, cor[i].first + dx});
}
}
pair<double, double> cur_range = {-1, -1};
if (range.size() > 0) cur_range = range[0];
for (int i = 0; i < range.size(); i++) {
if (cmp_less_equal(range[i].first, cur_range.second) && cmp_less(cur_range.second, range[i].second))
cur_range.second = range[i].second;
if (!cmp_less_equal(range[i].first, cur_range.second) || i + 1 == range.size()) {
real_range.push_back(cur_range);
cur_range = range[i];
}
}
bool iok = false;
for (int i = 0; i < real_range.size(); i++) {
if (cmp_less_equal(real_range[i].first, 0) && cmp_less_equal(len, real_range[i].second)) {
iok = true;
break;
}
}
if (iok)
r = m;
else
l = m + eps;
}
cout << setprecision(3) << fixed << r << endl;
return 0;
}
Compilation message
mobile.cpp: In function 'int main()':
mobile.cpp:43:27: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<double, double> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
43 | for (int i = 0; i < range.size(); i++) {
| ~~^~~~~~~~~~~~~~
mobile.cpp:46:76: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<double, double> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
46 | if (!cmp_less_equal(range[i].first, cur_range.second) || i + 1 == range.size()) {
| ~~~~~~^~~~~~~~~~~~~~~
mobile.cpp:52:27: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<double, double> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
52 | for (int i = 0; i < real_range.size(); i++) {
| ~~^~~~~~~~~~~~~~~~~~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
212 KB |
Output is correct |
2 |
Correct |
1 ms |
212 KB |
Output is correct |
3 |
Incorrect |
1 ms |
212 KB |
Output isn't correct |
4 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
212 KB |
Output is correct |
2 |
Correct |
1 ms |
212 KB |
Output is correct |
3 |
Correct |
1 ms |
212 KB |
Output is correct |
4 |
Incorrect |
1 ms |
212 KB |
Output isn't correct |
5 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
4 ms |
340 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
10 ms |
576 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
8 ms |
592 KB |
Output is correct |
2 |
Correct |
13 ms |
576 KB |
Output is correct |
3 |
Incorrect |
10 ms |
588 KB |
Output isn't correct |
4 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
13 ms |
588 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
139 ms |
4832 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
139 ms |
4876 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
181 ms |
5216 KB |
Output is correct |
2 |
Incorrect |
184 ms |
5128 KB |
Output isn't correct |
3 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
222 ms |
5600 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
227 ms |
5584 KB |
Output is correct |
2 |
Incorrect |
219 ms |
5752 KB |
Output isn't correct |
3 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Execution timed out |
1064 ms |
24324 KB |
Time limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Execution timed out |
1055 ms |
24256 KB |
Time limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Execution timed out |
1065 ms |
35628 KB |
Time limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Execution timed out |
1059 ms |
35532 KB |
Time limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Execution timed out |
1064 ms |
38680 KB |
Time limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Execution timed out |
1063 ms |
38644 KB |
Time limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Execution timed out |
1058 ms |
41816 KB |
Time limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Execution timed out |
1058 ms |
12732 KB |
Time limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Execution timed out |
1054 ms |
47924 KB |
Time limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Execution timed out |
1066 ms |
15956 KB |
Time limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |