Submission #1275289

#TimeUsernameProblemLanguageResultExecution timeMemory
1275289sm.22Mobile (BOI12_mobile)C++20
0 / 100
1100 ms95460 KiB
#include<bits/stdc++.h>
#pragma GCC optimize("Ofast")
using namespace std;
 
#define watch(x)        cerr << "\n" << (#x) << " is " << (x) << "\n";
#define int             long long 
#define ffor(i, a, b)   for(int i=a;i<b;i++)
#define rfor(i, a, b)   for(int i=a-1;i>=b;i--)
#define all(v)          v.begin(), v.end()
#define rall(v)         v.rbegin(), v.rend()
#define pb              push_back
#define fi              first
#define se              second
#define pii             pair<int, int>
#define vi              vector<int> 
#define vvi             vector<vi> 
#define show(a)         for(auto e : a) {cout<<e<<" ";} cout<<"\n"; 
#define pr(a, b, c)     ffor(i, b, c) {cout<<a[i]<<" ";} cout<<"\n";
#define cerr            if(false)cerr
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());

const int N = 1e6 + 10; 
int Mod = 1e9 + 7, INF = 1e18, BASE = 7, Block = 555;

double x[N], y[N]; 
int n, L; 

vector<double> g(int i, double far) {
        vector<double> v(2); 
        if(far*far <= y[i]) {
                return vector<double>({-1, -1}); 
                // v[0] = v[2] = 0; 
                // v[1] = v[3] = L; 
        } else {
                double s = sqrt(far * far - y[i] * y[i]);
                double l = x[i] - s, r = x[i] + s; 
                if(l < 0) l = 0; 
                if(r > L) r = L; 
                return vector<double>({l, r});
        }
        return v; 
}

bool f(double far) {

        vector<double> v = g(0, far); 
        vector<vector<double>> t;  
        if(v[0] != -1) t.pb(v); 

        ffor(i, 1, n) {
                vector<double> tmp = g(i, far);  
                if(tmp[0] != -1) t.pb(tmp);
                // now combine v & tmp 
        }

        // sort(all(t)); 
        // cout<<t.size()<<"\n"; 

        if(t.empty()) return true; 

        double l = t[0][0], r = t[0][1]; 
        ffor(i, 1, n) {
                if(t[i][0] > r) return true; 
                r = max(r, t[i][1]); 
        }

        return (l > 0 || r < L);
}

void solve() {

        cin>>n>>L; 

        ffor(i, 0, n) {
                cin>>x[i]>>y[i]; 
        }

        int l = 0, r = 1e18, m; 
        double ans = -1; 

        while(l <= r) {

                m = (l + r) / 2; 
                double d = m / (double)1e7; 

                bool yes = f(d); 

                // cout<<d<<" "<<yes<<"\n"; 

                if(yes) {
                        ans = d; 
                        l = m + 1; 
                } else r = m - 1; 
        }
        cout<<ans<<"\n"; 

}

signed main() { 
 
        ios_base::sync_with_stdio(false); 
        cin.tie(NULL); 

        int t = 1; //cin>>t; 
        cout<<fixed<<setprecision(6); 
 
        while(t--) solve();
 
        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...