zoukankan      html  css  js  c++  java
  • Codeforces Round #320 (Div. 2) [Bayan Thanks-Round] E. Weakness and Poorness 三分

    E. Weakness and Poorness
    time limit per test
    2 seconds
    memory limit per test
    256 megabytes
    input
    standard input
    output
    standard output

    You are given a sequence of n integers a1, a2, ..., an.

    Determine a real number x such that the weakness of the sequence a1 - x, a2 - x, ..., an - x is as small as possible.

    The weakness of a sequence is defined as the maximum value of the poorness over all segments (contiguous subsequences) of a sequence.

    The poorness of a segment is defined as the absolute value of sum of the elements of segment.

    Input

    The first line contains one integer n (1 ≤ n ≤ 200 000), the length of a sequence.

    The second line contains n integers a1, a2, ..., an (|ai| ≤ 10 000).

    Output

    Output a real number denoting the minimum possible weakness of a1 - x, a2 - x, ..., an - x. Your answer will be considered correct if its relative or absolute error doesn't exceed 10 - 6.

    Examples
    input
    3
    1 2 3
    output
    1.000000000000000
    input
    4
    1 2 3 4
    output
    2.000000000000000
    input
    10
    1 10 2 9 3 8 4 7 5 6
    output
    4.500000000000000
    Note

    For the first case, the optimal value of x is 2 so the sequence becomes  - 1, 0, 1 and the max poorness occurs at the segment "-1" or segment "1". The poorness value (answer) equals to 1 in this case.

    For the second sample the optimal value of x is 2.5 so the sequence becomes  - 1.5,  - 0.5, 0.5, 1.5 and the max poorness occurs on segment "-1.5 -0.5" or "0.5 1.5". The poorness value (answer) equals to 2 in this case.

     题意:找出一个x,使得a[i]-x的这段连续最大子序列和绝对值最小;

    思路:三分,check的时候来回扫一遍

    #pragma comment(linker, "/STACK:1024000000,1024000000")
    #include<iostream>
    #include<cstdio>
    #include<cmath>
    #include<string>
    #include<queue>
    #include<algorithm>
    #include<stack>
    #include<cstring>
    #include<vector>
    #include<list>
    #include<set>
    #include<map>
    using namespace std;
    #define ll long long
    #define pi (4*atan(1.0))
    #define eps 1e-4
    #define bug(x)  cout<<"bug"<<x<<endl;
    const int N=2e5+10,M=1e6+10,inf=2147483647;
    const ll INF=1e18+10,mod=2147493647;
    double a[N],v[N];
    int n;
    double equ(double x)
    {
        double ans=0;
        double sum=0;
        for(int i=1;i<=n;i++)
        {
            sum+=(a[i]-x);
            if(sum<0)
                sum=0;
            ans=max(ans,sum);
        }
        sum=0;
        for(int i=1;i<=n;i++)
        {
            sum-=(a[i]-x);
            if(sum<0)
                sum=0;
            ans=max(ans,sum);
        }
        return ans;
    }
    double ternarySearch(double l,double r)
    {
        for(int i=1;i<=100;i++)
        {
            double lll=(2*l+r)/3;
            double rr=(l+2*r)/3;
            double ans1=equ(lll);
            double ans2=equ(rr);
            if(ans1>ans2)
                l=lll;
            else
                r=rr;
        }
        return l;
    }
    int main()
    {
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
            scanf("%lf",&a[i]);
        double ans=ternarySearch(-20000,20000);
        printf("%f
    ",equ(ans));
        return 0;
    }
  • 相关阅读:
    2021,6,10 xjzx 模拟考试
    平衡树(二)——Treap
    AtCoder Beginner Contest 204 A-E简要题解
    POJ 2311 Cutting Game 题解
    Codeforces 990G GCD Counting 题解
    NOI2021 SDPTT D2T1 我已经完全理解了 DFS 序线段树 题解
    第三届山东省青少年创意编程与智能设计大赛总结
    Luogu P6042 「ACOI2020」学园祭 题解
    联合省选2021 游记
    Codeforces 1498E Two Houses 题解 —— 如何用结论吊打标算
  • 原文地址:https://www.cnblogs.com/jhz033/p/6579747.html
Copyright © 2011-2022 走看看