• 最佳牛围栏 题解


    题目描述

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

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

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

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

    输入格式

    第一行输入整数 N 和 F ,数据间用空格隔开。

    接下来 N 行,每行输出一个整数,第i+1行输出的整数代表,第i片区域内包含的牛的数目。

    输出格式

    输出一个整数,表示围起区域内每块地包含的牛的数量的平均值可能的最大值乘以1000得到的数值。

    样例输入

    10 6
    6 
    4
    2
    10
    3
    8
    5
    9
    4
    1
    

    样例输出

    6500
    

    分析

    二分板题。。。
    +前缀和

    AC代码

    #include <cstdio>
    
    int n, f;
    const int MAXN = 100005; 
    int a[MAXN]; 
    double s[MAXN];
    
    bool check(double k) {
    	for(int i = 1; i <= n; i++)
    		s[i] = a[i] - k + s[i - 1];
    	double mi = 0;
    	for(int i = f, j = 0; i <= n; i++, j++) {
    		if(mi > s[j]) mi = s[j];
    		if(s[i] >= mi) return 1;
    	}
    	return 0;
    }
    int main() {
    	scanf ("%d %d", &n, &f);
    	for(int i = 1; i <= n; i++)
    		scanf("%d", &a[i]);
    	double l = 0, r = 2000;
    	while(r - l > 1e-5) {
    		double mid = (l + r) / 2;
    		if(check(mid)) l = mid;
    		else r = mid;
    	}
    	printf("%d", (int)(r * 1000));
    	return 0;
    }
    
  • 相关阅读:
    echarts 柱状图
    echarts 双y轴渐变色进度条
    echarts 折线图
    算法系列一:本质以及特征
    导致薪水低的九大行为表现
    Tomcat使用shutdown.sh无法关闭
    定时将上月的数据导入到Oracle中,并更新指定的列
    定时抛转数据 crontab
    微服务主要模块
    tk.mybatis 调用oracle,生成ID
  • 原文地址:https://www.cnblogs.com/Chain-Forward-Star/p/13868083.html
Copyright © 2020-2023  润新知