제출 #1168723

#제출 시각아이디문제언어결과실행 시간메모리
1168723julia_08Mobile (BOI12_mobile)C++20
0 / 100
114 ms20104 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){

  ll x1 = p[i].x, y1 = p[i].y;
  ll 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<int> q;

  ld last_x = 0;

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

    while(!q.empty() && solve(q.top(), i) < last_x){
      last_x = solve(q.top(), i);
      q.pop();
    }

    q.push(i);

  }

  ld ans = 0;

  int last_i = 0;

  if(!q.empty()){
    last_i = q.top();
    q.pop();
  }

  while(!q.empty()){

    ld cur_x = solve(q.top(), last_i);

    ans = max(ans, (ld) ((p[last_i].x - cur_x) * (p[last_i].x - cur_x) + p[last_i].y * p[last_i].y));

    last_i = q.top();
    q.pop();

  }

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

  for(int i=0; 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...