Submission #477066

#TimeUsernameProblemLanguageResultExecution timeMemory
477066qwerty1234Mobile (BOI12_mobile)C++17
0 / 100
1084 ms15948 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:72:9: warning: unused variable 'l' [-Wunused-variable]
   72 |  double l = 0;
      |         ^
mobile.cpp:73:9: warning: unused variable 'r' [-Wunused-variable]
   73 |  double r = 1e20;
      |         ^
#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...