• CF578C:Weakness and Poorness——题解


    https://vjudge.net/problem/CodeForces-578C

    ——————————————————————————

    题目大意:序列的数-x,求最大连续子序列和的绝对值的最小值。

    ————————————————————————————

    没有绝对值的话,明显是单调增的。

    将数全部翻转,明显是单调减的。

    所以显然是单峰函数,可以三分x做。

    要注意精度,循环200就差不多了,不要循环太多次不然会TLE。

    #include<cstdio>
    #include<cmath>
    #include<algorithm>
    #include<cstring>
    #include<iostream>
    using namespace std;
    const int M=200001;
    double a[M];
    int n;
    double suan(double m){
        double ans=0,sum=0;
        for(int i=1;i<=n;i++){
        sum+=a[i]-m;
        if(sum<0)sum=0;
        ans=max(ans,sum);
        }
        sum=0;
        for(int i=1;i<=n;i++){
        sum+=m-a[i];
        if(sum<0)sum=0;
        ans=max(ans,sum);
        }
        return ans;
    }
    double sanfen(double l,double r){
        for(int i=1;i<=200;i++){
        double midl=(r-l)/3+l;
        double midr=r-(r-l)/3;
        if(suan(midl)<suan(midr))r=midr;
        else l=midl;
        }
        return l;
    }
    int main(){
        scanf("%d",&n);
        for(int i=1;i<=n;i++)scanf("%lf",&a[i]);
        printf("%.15lf
    ",suan(sanfen(-10000,10000)));
        return 0;
    }
  • 相关阅读:
    YAML序列样式
    YAML块标量头
    YAML字符流
    YAML语法字符
    YAML流程
    YAML集合和结构
    YAML缩进和分离
    YAML简介
    Git工作流程
    Git使用前配置
  • 原文地址:https://www.cnblogs.com/luyouqi233/p/8006170.html
Copyright © 2020-2023  润新知