二分答案 0 pts 求调。
查看原帖
二分答案 0 pts 求调。
1296826
lcfollower楼主2024/6/30 19:20

rt,如果不能二分答案有证明 or HACK 嘛 QWP。

#include <bits/stdc++.h>
using namespace std;

const int N = 1005;
int n;
double a[N] ,ans;
const double eps = 0.00000001;

inline int check(double mid){
  for(int i = 1;i <= n;i ++){
    double t = ceil(mid * i) - 1;
    if(t > a[i]) return 0;
    if(t == a[i]) continue;
    if(t < a[i]) return -1;
  }
  return 1;
} int main(){
  cin >> n;
  for(int i = 1;i <= n;i ++) cin >> a[i];
sort(a+1,a+1+n);
  double l = 0.0000001 ,r = 1000;
  while(r - l >= eps){
    double mid = (l + r) / 2.0;
    int flag = check(mid);
    if(flag == 1) l = mid + 0.0000001 ,ans = mid;
    else if(flag == 0) r = mid - 0.0000001;
    else ans = mid, l = mid + 0.0000001;
  }
  printf("%.7lf\n",ans);
  return 0;
}
2024/6/30 19:20
加载中...