제출 #1169523

#제출 시각아이디문제언어결과실행 시간메모리
1169523julia_08Mobile (BOI12_mobile)C++20
100 / 100
168 ms48704 KiB
#include <bits/stdc++.h>
using namespace std;

using ld = long double;
using ll = long long;

struct point{
  ll x, y;
};

vector<point> p;

ld solve(int i, int j){

  ld x1 = p[i].x, y1 = p[i].y;
  ld x2 = p[j].x, y2 = p[j].y;

  return (ld) (x2 * x2 + y2 * y2 - x1 * x1 - y1 * y1) / ((x2 - x1) * 2.0);

}

int main(){
  cin.tie(0)->sync_with_stdio(0);

  int n; ll l; cin >> n >> l;

  for(int i=1; i<=n; i++){
    ll x, y; cin >> x >> y;

    if(!p.empty() && x == p.back().x){
      p.back().y = min(p.back().y, abs(y));

    } else p.push_back({x, abs(y)});

  }

  stack<pair<ld, int>> q;

  for(int i=0; i<p.size(); i++){

    while(!q.empty() && solve(q.top().second, i) < q.top().first) q.pop();

    ld x = -2e9;

    if(!q.empty()) x = solve(q.top().second, i);

    q.push({x, i});

  }

  ld ans = 0;

  while(q.size() > 1){

    ld x = q.top().first;
    int i = q.top().second;
    q.pop();

    if(0 <= x && x <= l){
      ans = max(ans, (ld) ((p[i].x - x) * (p[i].x - x) + p[i].y * p[i].y));
    }

  }

  ld dist_1 = (ld) (p[0].x * p[0].x + p[0].y * p[0].y), dist_l = (ld) ((l - p[0].x) * (l - p[0].x) + p[0].y * p[0].y);

  for(int i=1; i<p.size(); i++){
    dist_1 = min(dist_1, (ld) (p[i].x * p[i].x + p[i].y * p[i].y));
    dist_l = min(dist_l, (ld) ((l - p[i].x) * (l - p[i].x) + p[i].y * p[i].y));
  }

  ans = max({ans, dist_1, dist_l});

  cout << fixed << setprecision(6) << sqrt(ans) << "\n";

  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...