Submission #671156

#TimeUsernameProblemLanguageResultExecution timeMemory
671156vjudge1Mobile (BOI12_mobile)C++11
4 / 100
1094 ms15932 KiB
#include <iostream> #include <cstdio> #include <cmath> #include <cstring> #include <vector> #include <map> #include <set> #include <stack> #include <queue> #include <algorithm> using namespace std; #define rep(i, a, b) for(int i = a; i < (b); ++i) #define all(x) begin(x), end(x) #define sz(x) (int)(x).size() #define mp make_pair #define pb push_back #define f first #define s second #define lb lower_bound #define ub upper_bound using vi = vector<int>; using ll = long long; using pii = pair<ll, int>; const int maxn = 1e6 + 7; double x[maxn], y[maxn]; double L; int n; bool check(double r) { vector<pair<double, double>> seg; rep(i, 0, n) { if (abs(y[i]) < r) { double dy = abs(y[i]); double tmp = r * r - dy * dy; double dx = sqrt(tmp); double x1 = x[i] - dx, x2 = x[i] + dx; if (x1 < 0.0 && x2 < 0.0) continue; if (x1 > L && x2 > L) continue; if (seg.empty()) { seg.push_back({x1, x2}); } else { while (!seg.empty()) { auto p = seg.back(); if (p.f >= x1 && p.s <= x2) { seg.pop_back(); } else if (p.f <= x1 && p.s <= x2 && p.s >= x1) { seg.pop_back(); x1 = p.f; } else { break; } } seg.push_back({x1, x2}); } } } if (seg.size() >= 1) { if (seg[0].f <= 0 && seg[0].s >= L) return true; } return false; } int main() { //ios::sync_with_stdio(false); scanf("%d %lf", &n, &L); rep(i, 0, n) { scanf("%lf %lf", &x[i], &y[i]); } double l = 0.0, r = 1e4; rep(it, 0, 75) { double mid = l + (r - l) / 2.0; if (check(mid)) { r = mid; } else { l = mid; } } printf("%.6lf\n", l); }

Compilation message (stderr)

mobile.cpp: In function 'int main()':
mobile.cpp:67:7: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   67 |  scanf("%d %lf", &n, &L);
      |  ~~~~~^~~~~~~~~~~~~~~~~~
mobile.cpp:69:8: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   69 |   scanf("%lf %lf", &x[i], &y[i]);
      |   ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
#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...