zoukankan      html  css  js  c++  java
  • 最佳牛围栏 题解

    题目描述

    农夫约翰的农场由 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;
    }
    
  • 相关阅读:
    C 语言实例
    C 语言实例
    C 语言实例
    C 语言实例
    C 语言实例
    C 语言实例
    C 语言实例
    C 语言实例
    YQCB冲刺第二周第二天
    YQCB冲刺第二周第一天
  • 原文地址:https://www.cnblogs.com/Chain-Forward-Star/p/13868083.html
Copyright © 2011-2022 走看看