Submission #477065

#TimeUsernameProblemLanguageResultExecution timeMemory
477065qwerty1234Mobile (BOI12_mobile)C++17
0 / 100
1100 ms63924 KiB
#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 (stderr)

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 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...