zoukankan      html  css  js  c++  java
  • Poj2018 Best Cow Fences

    传送门

      题目大意就是给定一个长度为 n 的正整数序列 A ,求一个平均数最大的,长度不小于 L 的子序列。

    思路:

      二分答案。

    Code:

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cmath>
    #include<cstring>
    #include<string>
    #include<cstdlib>
    #include<stack>
    #include<vector>
    #include<queue>
    #include<deque>
    #include<map>
    #include<set>
    using namespace std;
    #define lck_max(a,b) ((a)>(b)?(a):(b))
    #define lck_min(a,b) ((a)<(b)?(a):(b))
    typedef long long LL;
    const int maxn=1e7+7;
    LL N,L;
    double a[maxn],b[maxn],sum[maxn];
    inline double resd() {double ls;scanf("%lf",&ls);return ls;}
    inline LL read()
    {
        LL kr=1,xs=0;char ls;
        ls=getchar();
        while(!isdigit(ls))
        {
            if(!(ls^45))
                kr=-1;
            ls=getchar();
        }
        while(isdigit(ls))
        {
            xs=(xs<<1)+(xs<<3)+(ls^48);
            ls=getchar();
        }
        return xs*kr;
    }
    int main()
    {
        N=read();L=read();
        for(LL i=1;i<=N;i++) a[i]=resd();
        double l=-1e6,r=1e6,eps=1e-5;
        while(r-l>eps)
        {
            double mid=(l+r)/2;
            for(LL i=1;i<=N;i++) b[i]=a[i]-mid;
            for(LL i=1;i<=N;i++) sum[i]=sum[i-1]+b[i];
            double maxx=-1e10,minn=1e10;
            for(LL i=L;i<=N;i++)
                minn=lck_min(minn,sum[i-L]),maxx=lck_max(maxx,sum[i]-minn);
            if(maxx>=0) l=mid;
            else r=mid;
        }
        printf("%lld
    ",LL(r*1000));
    return 0;
    }
  • 相关阅读:
    解析Javascript事件冒泡机制
    LeetCode——Flatten Binary Tree to Linked List
    流动python
    HDU2586
    Cannot find ActionMappings or ActionFormBeans collection
    reactor设计模式
    简单的Ajax应用实例
    CString——Left、Right、Find、ReverseFind
    MATLAB新手教程
    八大排序算法总结
  • 原文地址:https://www.cnblogs.com/lck-lck/p/9883096.html
Copyright © 2011-2022 走看看