Submission #56197

# Submission time Handle Problem Language Result Execution time Memory
56197 2018-07-10T08:39:05 Z 노영훈(#1580) Mobile (BOI12_mobile) C++11
100 / 100
390 ms 32776 KB
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double lf;
typedef pair<ll, ll> pll;
const int MX=1000010, inf=2e9;
const ll linf=5e18;

int n;
ll l;
pll P[MX];

ll sq(ll x){ return x*x; }

lf itst(pll a, pll b){
    lf dm=a.first-b.first, db=a.second-b.second;
    return -db/dm;
}
lf eval(pll a, lf x){
    return a.first*x + a.second + x*x;
}

int main(){
    ios::sync_with_stdio(0); cin.tie(0);
    cin>>n>>l;
    for(int i=1; i<=n; i++){
        ll x, y; cin>>x>>y;
        P[i]={-2*x,x*x+y*y};
    }
    sort(P+1, P+n+1, [](pll &a, pll &b){
        if(a.first==b.first) return a.second>b.second;
        return a.first>b.first;
    });
    // for(int i=1; i<=n; i++) cout<<P[i].first<<' '<<P[i].second<<'\n';
    vector<pll> stk; // m, b
    // stk.push_back({0, linf});
    for(int i=1; i<=n; i++){
        pll now=P[i];
        while(!stk.empty()){
            pll prv=stk.back(); stk.pop_back();
            if(now.first==prv.first) continue;
            if(!stk.empty() && itst(stk.back(), prv)>=itst(prv, now)) continue;
            else { stk.push_back(prv); break; }
        }
        stk.push_back(P[i]);
    }


    lf ans=0;
    lf prv=-linf;
    for(int i=1; i<(int)stk.size(); i++){
        lf x=itst(stk[i-1], stk[i]);
        // cout<<stk[i].first<<' '<<stk[i].second<<": "<<x<<'\n';
        if(x<0){ prv=x; continue; }
        if(prv<0){ ans=max(ans, eval(stk[i-1], 0)); }
        if(x>l){ ans=max(ans, eval(stk[i-1], l)), prv=x; break; }
        ans=max(ans, eval(stk[i], x));
        prv=x;
    }
    if(prv<0) ans=max(ans, eval(stk.back(), 0));
    if(prv<l) ans=max(ans, eval(stk.back(), l));
/*

    lf prv=-linf, ans=0;
    for(int i=1; i<(int)stk.size(); i++){
        lf now=itst(stk[i], stk[i-1]);
        // cout<<now<<'\n';
        // cout<<now<<' '<<eval(stk[i], now)<<'\n';
        if(now<0) continue;
        if(prv<0 && 0<=now){
            prv=now;
            ans=max(ans, eval(stk[i-1], 0));
        }
        if(l<now){
            ans=max(ans, eval(stk[i-1], l));
            break;
        }
        // cout<<now<<' '<<eval(stk[i], now)<<'\n';
        ans=max(ans, eval(stk[i], now));
        // cout<<'\n';
    }
    // cout<<'\n';
    // for(int i=0; i<(int)stk.size(); i++) cout<<stk[i].first<<' '<<stk[i].second<<'\n';

    // if(stk.size()==1U) ans=max({ans, eval(stk[0], 0), eval(stk[0], l)});
    // if(stk.size()>1U && itst(stk[0], stk[1])<=0) ans=max(ans, eval(stk[0], 0));
    // if(stk.size()>1U && itst(stk.back(), stk[stk.size()-2])>=l) ans=max(ans, eval(stk.back(), l));
    */
    cout.precision(5);
    cout<<fixed<<sqrtl(ans);
    return 0;
}
# Verdict Execution time Memory Grader output
1 Correct 2 ms 376 KB Output is correct
2 Correct 3 ms 376 KB Output is correct
3 Correct 3 ms 540 KB Output is correct
4 Correct 3 ms 540 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 540 KB Output is correct
2 Correct 2 ms 540 KB Output is correct
3 Correct 2 ms 632 KB Output is correct
4 Correct 2 ms 632 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 632 KB Output is correct
2 Correct 3 ms 672 KB Output is correct
3 Correct 3 ms 672 KB Output is correct
4 Correct 3 ms 672 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 4 ms 672 KB Output is correct
2 Correct 4 ms 672 KB Output is correct
3 Correct 4 ms 672 KB Output is correct
4 Correct 4 ms 672 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 4 ms 748 KB Output is correct
2 Correct 5 ms 748 KB Output is correct
3 Correct 5 ms 748 KB Output is correct
4 Correct 4 ms 748 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 3 ms 748 KB Output is correct
2 Correct 4 ms 748 KB Output is correct
3 Correct 3 ms 748 KB Output is correct
4 Correct 4 ms 748 KB Output is correct
5 Correct 4 ms 748 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 23 ms 2028 KB Output is correct
2 Correct 23 ms 2028 KB Output is correct
3 Correct 16 ms 2028 KB Output is correct
4 Correct 25 ms 2028 KB Output is correct
5 Correct 15 ms 2028 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 24 ms 2028 KB Output is correct
2 Correct 22 ms 2028 KB Output is correct
3 Correct 26 ms 2028 KB Output is correct
4 Correct 25 ms 2028 KB Output is correct
5 Correct 28 ms 2028 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 23 ms 4180 KB Output is correct
2 Correct 28 ms 4180 KB Output is correct
3 Correct 25 ms 4208 KB Output is correct
4 Correct 38 ms 4208 KB Output is correct
5 Correct 26 ms 4208 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 32 ms 4208 KB Output is correct
2 Correct 30 ms 4208 KB Output is correct
3 Correct 34 ms 4208 KB Output is correct
4 Correct 58 ms 4208 KB Output is correct
5 Correct 30 ms 4208 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 30 ms 4208 KB Output is correct
2 Correct 40 ms 4208 KB Output is correct
3 Correct 30 ms 4208 KB Output is correct
4 Correct 47 ms 4208 KB Output is correct
5 Correct 53 ms 4208 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 144 ms 16744 KB Output is correct
2 Correct 210 ms 16744 KB Output is correct
3 Correct 161 ms 16744 KB Output is correct
4 Correct 205 ms 16744 KB Output is correct
5 Correct 160 ms 16744 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 194 ms 16744 KB Output is correct
2 Correct 176 ms 16744 KB Output is correct
3 Correct 180 ms 16744 KB Output is correct
4 Correct 236 ms 16744 KB Output is correct
5 Correct 186 ms 16744 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 214 ms 26584 KB Output is correct
2 Correct 237 ms 26584 KB Output is correct
3 Correct 198 ms 26584 KB Output is correct
4 Correct 261 ms 26584 KB Output is correct
5 Correct 208 ms 26584 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 191 ms 26584 KB Output is correct
2 Correct 186 ms 26584 KB Output is correct
3 Correct 157 ms 26584 KB Output is correct
4 Correct 213 ms 26584 KB Output is correct
5 Correct 210 ms 26584 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 194 ms 28084 KB Output is correct
2 Correct 211 ms 28084 KB Output is correct
3 Correct 274 ms 28084 KB Output is correct
4 Correct 270 ms 28084 KB Output is correct
5 Correct 298 ms 28084 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 221 ms 28084 KB Output is correct
2 Correct 266 ms 28084 KB Output is correct
3 Correct 248 ms 28084 KB Output is correct
4 Correct 321 ms 28084 KB Output is correct
5 Correct 253 ms 28084 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 215 ms 29740 KB Output is correct
2 Correct 300 ms 29740 KB Output is correct
3 Correct 270 ms 29740 KB Output is correct
4 Correct 333 ms 29740 KB Output is correct
5 Correct 310 ms 29740 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 249 ms 29740 KB Output is correct
2 Correct 277 ms 29740 KB Output is correct
3 Correct 320 ms 29740 KB Output is correct
4 Correct 332 ms 29740 KB Output is correct
5 Correct 255 ms 29740 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 290 ms 32776 KB Output is correct
2 Correct 352 ms 32776 KB Output is correct
3 Correct 355 ms 32776 KB Output is correct
4 Correct 390 ms 32776 KB Output is correct
5 Correct 365 ms 32776 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 346 ms 32776 KB Output is correct
2 Correct 300 ms 32776 KB Output is correct
3 Correct 266 ms 32776 KB Output is correct
4 Correct 370 ms 32776 KB Output is correct
5 Correct 322 ms 32776 KB Output is correct