Submission #827885

#TimeUsernameProblemLanguageResultExecution timeMemory
827885EntityPlanttMobile (BOI12_mobile)C++14
0 / 100
1068 ms131072 KiB
#define ONLINE_JUDGE #include <cstdio> #include <cmath> #include <vector> #ifndef ONLINE_JUDGE #include <windows.h> const HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE); inline void scta(const int &clr) { SetConsoleTextAttribute(handle, clr); } #endif 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() { 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 > 2e-4) { m = (l + r) / 2.0; intervals.clear(); intervals.push_back({0.0, len}); #ifndef ONLINE_JUDGE scta(7); printf("l = %lf, r = %lf, m = %lf\n", l, r, m); #endif for (auto &point : points) { x = point.first; radius = sqrt(m * m - double(point.second) * double(point.second)); #ifndef ONLINE_JUDGE 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); #endif for (i = intervals.size() - 1; i >= 0; i--) { if (x - radius <= intervals[i].first && intervals[i].second <= x + radius) { #ifndef ONLINE_JUDGE scta(10); printf(" Entire interval is contained\n"); #endif intervals.erase(intervals.begin() + i); } else if (x + radius <= intervals[i].first || intervals[i].second <= x - radius) { #ifndef ONLINE_JUDGE scta(12); printf(" None of the interval is contained\n"); #endif } else if (x - radius <= intervals[i].first && x + radius <= intervals[i].second) { #ifndef ONLINE_JUDGE scta(9); printf(" The left part of the interval is contained\n"); #endif intervals[i].first = x + radius; } else if (intervals[i].first <= x - radius && intervals[i].second <= x + radius) { #ifndef ONLINE_JUDGE scta(13); printf(" The right part of the interval is contained\n"); #endif intervals[i].second = x - radius; } else { #ifndef ONLINE_JUDGE scta(11); printf(" The interval has to be split into two\n"); #endif intervals.push_back({x + radius, intervals[i].second}); intervals[i].second = x - radius; } } if (intervals.empty()) break; // Everything covered, number too big } if (intervals.empty()) r = m; else l = m; } printf("%lf", l); return 0; }

Compilation message (stderr)

mobile.cpp: In function 'int main()':
mobile.cpp:17:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   17 |     scanf("%d%d%d%d", &n, &len, &x, &y);
      |     ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
mobile.cpp:20:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   20 |         scanf("%d%d", &x, &y);
      |         ~~~~~^~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...