zoukankan      html  css  js  c++  java
  • Acwing-102-最佳牛围栏(二分,实数)

    链接:

    https://www.acwing.com/problem/content/104/

    题意:

    农夫约翰的农场由 N 块田地组成,每块地里都有一定数量的牛,其数量不会少于1头,也不会超过2000头。

    约翰希望用围栏将一部分连续的田地围起来,并使得围起来的区域内每块地包含的牛的数量的平均值达到最大。

    围起区域内至少需要包含 F 块地,其中 F 会在输入中给出。

    在给定条件下,计算围起区域内每块地包含的牛的数量的平均值可能的最大值是多少。

    思路:

    二分最大值,然后前缀和检查一遍.

    代码:

    #include <bits/stdc++.h>
    using namespace std;
    const int MAXN = 1e5+10;
    double a[MAXN], b[MAXN], Sum[MAXN];
    double eps = 1e-5;
    int n, f;
    
    bool Check(double mid)
    {
        double minval = 1e10;
        double ans = -1e10;
        for (int i = f;i <= n;i++)
        {
            minval = min(minval, Sum[i-f]);
            ans = max(ans, Sum[i]-minval);
        }
        if (ans > 0)
            return true;
        return false;
    }
    
    int main()
    {
        scanf("%d %d", &n, &f);
        for (int i = 1;i <= n;i++)
            scanf("%lf", &a[i]);
        double l = -1e6, r = 1e6;
        double ans = 0;
        while (r-l > eps)
        {
            double mid = (l+r)/2;
            for (int i = 1;i <= n;i++)
                b[i] = a[i]-mid;
            for (int i = 1;i <= n;i++)
                Sum[i] = Sum[i-1]+b[i];
            if (Check(mid))
            {
                l = mid;
                ans = max(ans, mid);
            }
            else
                r = mid;
        }
        printf("%d
    ", int(r*1000));
    
        return 0;
    }
    
  • 相关阅读:
    单据的多个状态字段
    Win7 如何阻止程序联网
    强制关机.bat
    Delphi Class of
    坐标转换 GetCursorPos与转换
    Delphi 的RTTI机制浅探-2
    Delphi 的RTTI机制浅探-1
    Delphi 的RTTI机制-3
    Delphi 的RTTI机制-2
    Delphi 的RTTI机制-1
  • 原文地址:https://www.cnblogs.com/YDDDD/p/11469150.html
Copyright © 2011-2022 走看看