Submission #1302809

#TimeUsernameProblemLanguageResultExecution timeMemory
1302809ChottuFMobile (BOI12_mobile)C++17
0 / 100
325 ms64636 KiB
#include <bits/stdc++.h>
using namespace std;

long double intersect(pair<long double, long double> a, pair<long double, long double> b){
    return (((b.first*b.first) + (b.second*b.second)) - ((a.first*a.first)+(a.second*a.second)))/(2.0*(b.first-a.first));
}

long double dist(pair<long double, long double> p, long double x){
    long double dx = p.first - x;
    return (dx*dx) + (p.second*p.second);
}

signed main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    int n;
    long double l;
    cin >> n >> l;
    vector<pair<long double,long double>> arr(n);
    for (int i = 0; i<n; i++){
        cin >> arr[i].first >> arr[i].second;
        arr[i].second = abs(arr[i].second);
    }
    sort(arr.begin(), arr.end());
    vector<pair<long double, long double>> s;
    for (int i = 0; i<n; i++){
        if (!s.empty() && abs(s.back().first - arr[i].first) < 1e-9){
            continue;
        }
        while (s.size() >= 2){
            //do stuff
            long double cr = intersect(s.back(), arr[i]);
            long double prv = intersect(s[s.size()-2], s.back());
            
            if (cr <= prv) s.pop_back();
            else break;
        }
        s.push_back(arr[i]);
    }
    long double ans = 0;
    ans = max(ans, dist(s[0],0));
    for (int i = 0; i<s.size()-1; i++){
        long double lft,rgt;
        if (i == 0) lft = -1e18;
        else lft = intersect(s[i-1], s[i]);

        if (i == s.size()-1) rgt = 1e18;
        else rgt = intersect(s[i], s[i+1]);

        long double st = max(lft, (long double)0.0);
        long double nd = min(rgt, l);

        if (st <= nd){
            ans = max(ans, dist(s[i], st));
            ans = max(ans, dist(s[i], nd));
        }
    }
    ans = max(ans, dist(s.back(), l));
    cout << fixed << setprecision(10) << sqrt(ans);
    return 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...