前言:我们要注意到二分效率之高,且我们double输出是 lf 不是 llf
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n;
const int N = (int)1e6 + 10;
int a[N];
int check(double x) {
double now = 0;
for (int i = 1; i <= n; i++) {
now += x;
int u = (int)now;
if (u < a[i]) return 0; // 表示太小了
if (u > a[i]) return 1; // 表示太大了
}
return 0; // 符合且可以变大
}
void find() {
double l = 0, r = 2e9;
while (r - l > 1e-6) {
double mid = (l + r) / 2;
if (check(mid)) {
r = mid;
}
else {
l = mid;
}
}
printf("%.10lf", l);
}
signed main() {
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> a[i];
}
find();
return 0;
}