# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
827896 | EntityPlantt | Mobile (BOI12_mobile) | C++17 | 1093 ms | 131072 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#define ONLINE_JUDGE
#include <cstdio>
#include <cmath>
#include <vector>
/*#include <windows.h>
const HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
inline void scta(const int &clr) { SetConsoleTextAttribute(handle, clr); }*/
using namespace std;
vector <pair <int, int>> points;
vector <pair <double, double>> intervals;
double radius;
int n, len, x, y, i;
double l, r = 2e9, m;
int main() {
if (fopen("mobile.inp", "r")) {
freopen("mobile.inp", "r", stdin);
freopen("mobile.out", "w", stdout);
}
scanf("%d%d%d%d", &n, &len, &x, &y);
points.push_back({x, abs(y)});
while (--n) {
scanf("%d%d", &x, &y);
/*if (points.back().first == x) {
if (y < 0) {
points.back().second = -y;
}
}
else*/ points.push_back({x, y});
}
while (r - l > 1e-8) {
m = (l + r) / 2.0;
intervals.clear();
intervals.push_back({0.0, len});
/*scta(7);
printf("l = %lf, r = %lf, m = %lf\n", l, r, m);*/
for (auto &point : points) {
x = point.first;
radius = sqrt(m * m - double(point.second) * double(point.second));
/*scta(15);
printf(" Intervals =");
scta(14);
for (auto &in : intervals) {
printf(" (%lf, %lf)", in.first, in.second);
}
scta(15);
printf("\n place = %d, radius = %lf\n", x, radius);*/
for (i = intervals.size() - 1; i >= 0; i--) {
if (x - radius <= intervals[i].first && intervals[i].second <= x + radius) {
// scta(10); printf(" Entire interval is contained\n");
intervals.erase(intervals.begin() + i);
}
else if (x + radius <= intervals[i].first || intervals[i].second <= x - radius) {
// scta(12); printf(" None of the interval is contained\n");
}
else if (x - radius <= intervals[i].first && x + radius <= intervals[i].second) {
// scta(9); printf(" The left part of the interval is contained\n");
intervals[i].first = x + radius;
}
else if (intervals[i].first <= x - radius && intervals[i].second <= x + radius) {
// scta(13); printf(" The right part of the interval is contained\n");
intervals[i].second = x - radius;
}
else {
// scta(11); printf(" The interval has to be split into two\n");
intervals.push_back({x + radius, intervals[i].second});
intervals[i].second = x - radius;
}
}
if (intervals.empty()) break;
}
if (intervals.empty()) r = m; else l = m;
}
printf("%lf\n", l);
return 0;
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |