이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
#define Loop(x,l,r) for (ll x = (l); x < (r); ++x)
typedef long long ll;
using namespace std;
const int N = 200'010;
double pos[N];
double sum;
int n;
pair<double,double> solve(double l)
{
double sum = ::sum;
assert(l <= sum/n);
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 {mn, mx};
}
int main()
{
cin.tie(0) -> sync_with_stdio(false);
cin >> n;
Loop (i,0,n) {
ll x;
cin >> x;
pos[i] = x;
sum += pos[i];
}
double m = sum/n;
double ans = m - pos[0];
double mn = pos[0];
const double eps = 1e-6;
while (m-mn > eps) {
auto [x, y] = solve(mn);
ans = min(ans, y-x);
mn = x+eps;
}
cout << fixed << setprecision(9);
cout << ans << '\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... |