Submission #1056895

#TimeUsernameProblemLanguageResultExecution timeMemory
1056895TimAniMobile (BOI12_mobile)C++17
13 / 100
1080 ms40672 KiB
// time-limit: 3000 #include <bits/stdc++.h> using namespace std; using ll = long long; const double eps = 1E-4; struct point { int x{}, y{}; }; void solve() { int n, L; cin >> n >> L; vector<point> p(n); for(int i = 0; i < n; i++) { cin >> p[i].x >> p[i].y; } auto intersection = [&](const point& A, double R) -> array<double, 2> { if(abs(A.y) > R) { assert(1); return {L, -1}; } double D = 1.0 * R * R - 1.0 * A.y * A.y; // divided by 4 double x1 = A.x - sqrt(D); double x2 = A.x + sqrt(D); if(x2 < x1) swap(x1, x2); return {x1, x2}; }; auto good = [&](double R) { vector<array<double, 2>> segs; for(int i = 0; i < n; i++) { if(abs(p[i].y) > R) continue; segs.push_back(intersection(p[i], R)); } if(segs.empty()) return false; sort(segs.begin(), segs.end()); double l = segs[0][0], r = segs[0][1]; int i = 0; while(i + 1 < segs.size() && segs[i + 1][0] <= r) { r = max(segs[i + 1][1], r); i++; } return r >= L && l <= 0; }; double l = 0, r = 4e9; while(r - l > eps) { double R = (r + l) / 2; if(good(R)) { r = R; } else { l = R; } } cout << fixed << setprecision(-log10(eps)) << r << endl; } int main() { cin.tie(0)->sync_with_stdio(0); double T = 1; //cin >> T; while(T--) solve(); return 0; }

Compilation message (stderr)

mobile.cpp: In lambda function:
mobile.cpp:24:21: warning: narrowing conversion of 'L' from 'int' to 'double' [-Wnarrowing]
   24 |             return {L, -1};
      |                     ^
mobile.cpp: In lambda function:
mobile.cpp:43:21: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::array<double, 2> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   43 |         while(i + 1 < segs.size() && segs[i + 1][0] <= r) {
      |               ~~~~~~^~~~~~~~~~~~~
#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...