Submission #677784

#TimeUsernameProblemLanguageResultExecution timeMemory
677784benedict0724Seesaw (JOI22_seesaw)C++17
0 / 100
0 ms212 KiB
#include <iostream>
#include <stack>
#include <string>
#include <queue>
#include <vector>
#include <set>
#include <map>
#include <algorithm>
#include <cassert>

using namespace std;
typedef long long ll;

double A[200002];
int N;

double solve(int i)
{
    double l, r;
    l = A[i];
    r = A[i];
    int s = i, e = i;
    double now = A[i];
    for(int i=1;i<N;i++)
    {
        double S = (now * i + A[s-1]) / (i + 1);
        double E = (now * i + A[e+1]) / (i + 1);
        
        if(s == 1)
        {
            now = E;
            e++;
        }
        else if(e == N)
        {
            now = S;
            s--;
        }
        else if(max(r, S) - min(l, S) <= max(r, E) - min(l, E))
        {
            now = S;
            s--;
        }
        else
        {
            now = E;
            e++;
        }
        r = max(r, now);
        l = min(l, now);
    }
    return r - l;
}

int main()
{
    ios::sync_with_stdio(false); cin.tie(NULL);
    cin >> N;
    for(int i=1;i<=N;i++) cin >> A[i];
    double now = 0;
    for(int i=1;i<=N;i++) now += A[i];
    now /= N;
    double ans = A[N] - A[1];
    for(int i=1;i<=N;i++) ans = min(ans, solve(i));
    cout.precision(15);
    cout << ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...