제출 #1338613

#제출 시각아이디문제언어결과실행 시간메모리
1338613xnoelMobile (BOI12_mobile)C++20
0 / 100
1097 ms32552 KiB
#include <bits/stdc++.h>
#define int long long
using namespace std;

int n;
double len;
vector<pair<int, int>> points;
vector<pair<double,double>> compressed_points;


pair<double,double> findx(int x, int y, double dist){
    double newx=double(x);
    double newy=double(y);
    if (dist<abs(newy)) return {-1,-1};
    double diff=sqrt(dist*dist-newy*newy);
    return {newx-diff,newx+diff};
}

bool alg(double dist){
    stack<pair<double,double>> st;
    for (auto [x,y]:compressed_points) {
        auto [x1,x2]=findx(x,y,dist);
        if (x1==-1) continue;
        if (x2<0 || x1>len) continue;
        while (!st.empty() && st.top().second>x1) {
            st.pop();
        }
        if (st.empty()) st.push({x1,x2});
        else if (st.top().second>=x1) st.push({x1,x2});
    }
    if (st.empty()) return false;
    return st.top().second>=len;
}


signed main(){
    //freopen("1.in","r",stdin);
    cin>>n>>len;
    points.resize(n);
    for (int i=0;i<n;i++) cin>>points[i].first>>points[i].second;
    sort(points.begin(),points.end(),[](const pair<double,double>& a, const pair<double,double>& b) {
        if (a.first==b.first) return (a.second)*(a.second)<(b.second)*(b.second);
        return a.first<b.first;
    });
    int prev_x=-1e9-10;
    for (auto [x,y]:points) {
        if (x==prev_x) continue;
        prev_x=x;
        compressed_points.push_back({double(x),double(y)});
    }

    // for (auto [x,y]:compressed_points) {
    //     cout<<x<<" "<<y<<endl;
    // }
    // cout<<"\n";

    double left=0,right=len;
    while (right-left>1e-6){
        double mid=left+(right-left)/2;
        if (alg(mid)) right=mid;
        else left=mid;
    }
    cout<<left<<"\n";
    
}
#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...