• 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;
    }
  • 相关阅读:
    14 微服务电商【黑马乐优商城】:day06-使用nginx反向代理并掌握cors解决跨域
    Docker容器化【Docker安装与启动&Docker镜像与容器相关命令】
    [LeetCode]Palindrome Number 验证回文数
    C++结构体定义构造函数
    C++中explicit关键字的使用
    C++ const关键字
    图像梯度(Image Gradient)
    ORB特征点匹配
    c++:internal compiler error:killked(program cclplus) 解决办法
    最小二乘通俗解释
  • 原文地址:https://www.cnblogs.com/jhz033/p/6579747.html
Copyright © 2020-2023  润新知