Submission #1225504

#TimeUsernameProblemLanguageResultExecution timeMemory
1225504AlgorithmWarriorMobile (BOI12_mobile)C++20
0 / 100
521 ms73828 KiB
#include <bits/stdc++.h>
#define ld long double

using namespace std;

struct range{
    ld x,y,l,r;
};

ld special_inters(ld x1,ld y1,ld x2,ld y2){
    return (x1*x1-x2*x2+y1*y1-y2*y2)/(2*(x1-x2));
}

vector<range>range;
int n,len;
int const NMAX=1000005;
struct point{
    int x,y;
}points[NMAX];

void read(){
    cin>>n>>len;
    int i;
    for(i=1;i<=n;++i)
        cin>>points[i].x>>points[i].y;
}

void get_range(){
    int i;
    for(i=1;i<=n;++i){
        int x=points[i].x,y=abs(points[i].y);
        while(i<n && x==points[i+1].x){
            ++i;
            if(y>abs(points[i].y))
                y=abs(points[i].y);
        }
        while(!range.empty()){
            auto [px,py,l,r]=range.back();
            ld inters=special_inters(x,y,px,py);
            if(r<=inters)
                break;
            if(inters<=l)
                range.pop_back();
            else{
                range.back().r=inters;
                break;
            }
        }
        if(range.empty())
            range.push_back({(ld)x,(ld)y,0,(ld)len});
        else
            range.push_back({(ld)x,(ld)y,range.back().r,(ld)len});
    }
}

ld dist(ld x1,ld y1,ld x2,ld y2){
    return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
}

ld solve(){
    ld mxm=0;
    for(auto [x,y,l,r] : range){
        ld dst=dist(x,y,l,0);
        if(mxm<dst)
            mxm=dst;
        dst=dist(x,y,r,0);
        if(mxm<dst)
            mxm=dst;
    }
    return mxm;
}

int main()
{
    read();
    get_range();
    cout<<fixed<<setprecision(6)<<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...