제출 #1168719

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

using ld = long double;

const int MAXN = 1e6 + 10;

ld x[MAXN], y[MAXN];

ld solve(int i, int j){

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

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

}

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

  int n, l; cin >> n >> l;

  for(int i=1; i<=n; i++){
    cin >> x[i] >> y[i];
  }

  stack<int> q;

  ld last_x = 0;

  for(int i=1; i<=n; 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, (x[last_i] - cur_x) * (x[last_i] - cur_x) + y[last_i] * y[last_i]);

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

  }

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

  for(int i=2; i<=n; i++){
    dist_1 = min(dist_1, x[i] * x[i] + y[i] * y[i]);
    dist_l = min(dist_l, (l - x[i]) * (l - x[i]) + y[i] * y[i]);
  }

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