This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
#define Loop(x,l,r) for (ll x = (l); x < (r); ++x)
typedef long long ll;
using namespace std;
mt19937_64 rd(time(0));
const int N = 200'010;
double pos[N];
double sum;
int n;
double solve(double l)
{
double sum = ::sum;
if (l > sum/n)
return 1;
int p0 = 0, p1 = n-1;
double mn = sum/n, mx = sum/n;
for (int cnt = n; p0 < p1; --cnt) {
if (l <= (sum-pos[p1])/(cnt-1)) {
sum -= pos[p1];
mn = min(mn, sum/(cnt-1));
--p1;
} else {
sum -= pos[p0];
mx = max(mx, sum/(cnt-1));
++p0;
}
}
return mx - mn;
}
int main()
{
cin.tie(0) -> sync_with_stdio(false);
cin >> n;
Loop (i,0,n) {
ll x;
cin >> x;
pos[i] = (double)x/1e9;
sum += pos[i];
}
double m = sum/n;
double ans = m - pos[0];
while (clock() < 1.8 * CLOCKS_PER_SEC) {
double x = (double)rd()/ULONG_LONG_MAX * (m - pos[0]) + pos[0];
ans = min(ans, solve(x));
}
cout << fixed << setprecision(9);
cout << ans*1e9 << '\n';
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |