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)
#define LoopR(x,l,r) for (ll x = (r)-1; x >= (l); --x)
typedef long long ll;
using namespace std;
const int N = 200'010;
double pos[N];
double sum;
int n;
vector<pair<double,double>> arr;
void make()
{
double sum = ::sum;
double m = sum/n;
int p0 = 0, p1 = n-1;
pos[n] = 2e9;
auto cur_pair = [&]() {
return pair<double,double>(sum/(p1-p0+1), (sum - pos[p0] + pos[p1+1])/(p1-p0+1));
};
arr = {cur_pair()};
for (int cnt = n; p0 < p1; --cnt) {
if ((sum-pos[p0])/(cnt-1) <= m) {
sum -= pos[p0];
++p0;
} else {
sum -= pos[p1];
--p1;
}
arr.push_back(cur_pair());
}
}
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];
}
make();
sort(arr.begin(), arr.end(), [](const pair<double,double> &a, const pair<double,double> &b){
return a.second < b.second;
});
LoopR (i,0,arr.size()-1)
arr[i].first = min(arr[i].first, arr[i+1].first);
double m = sum/n;
double ans = min(m - arr.front().first, arr.back().second - m);
Loop (i,0,arr.size()-1)
ans = min(ans, arr[i].second - arr[i+1].first);
cout << fixed << setprecision(9);
cout << ans << '\n';
}
Compilation message (stderr)
seesaw.cpp: In function 'int main()':
seesaw.cpp:2:40: warning: comparison of integer expressions of different signedness: 'll' {aka 'long long int'} and 'std::vector<std::pair<double, double> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
2 | #define Loop(x,l,r) for (ll x = (l); x < (r); ++x)
| ^
seesaw.cpp:53:2: note: in expansion of macro 'Loop'
53 | Loop (i,0,arr.size()-1)
| ^~~~
# | 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... |