POJ 2018 Best Cow Fences

Best Cow Fences
Time Limit: 1000MS   Memory Limit: 30000K
Total Submissions: 8772   Accepted: 2802

Description

Farmer John's farm consists of a long row of N (1 <= N <= 100,000)fields. Each field contains a certain number of cows, 1 <= ncows <= 2000. 

FJ wants to build a fence around a contiguous group of these fields in order to maximize the average number of cows per field within that block. The block must contain at least F (1 <= F <= N) fields, where F given as input. 

Calculate the fence placement that maximizes the average, given the constraint. 

Input

* Line 1: Two space-separated integers, N and F. 

* Lines 2..N+1: Each line contains a single integer, the number of cows in a field. Line 2 gives the number of cows in field 1,line 3 gives the number in field 2, and so on. 

Output

* Line 1: A single integer that is 1000 times the maximal average.Do not perform rounding, just print the integer that is 1000*ncows/nfields. 

Sample Input

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

Sample Output

6500
题目大意:给你一个有n个数的序列,让你找到不小于f个数的序列中最大的平均值。
解题方法:类似于最大连续子段和,如果前面子段的平均值小于紧接着后面长度不小于f的子段,则将前面的子段舍弃,否则将前面的子段保留。
#include <stdio.h>
#include <iostream>
#include <string.h>
using namespace std;

int num[100020];
int sum[100020];

int main()
{
    int n, f;
    int ans;
    while(scanf("%d%d", &n, &f) != EOF)
    {
        ans = -1;
        memset(sum, 0, sizeof(sum));
        for (int i = 0; i < n; i++)
        {
            scanf("%d", &num[i + 1]);
            sum[i + 1] = sum[i] + num[i + 1];
        }
        int i, j;
        for (i = 0, j = 0; i <= n - f; i++)
        {
            if (i > j && (sum[i] - sum[j]) * (i + f - j) < (sum[i + f] - sum[j]) * (i - j))
            {
                j = i;//如果i和j之间的子段平均值小于i到i+f之间的平均值,则将舍弃i和j之间的子段

        }
if (ans < 1000 * (sum[i + f] - sum[j]) / (i + f - j))
            {
                ans = 1000 * (sum[i + f] - sum[j]) / (i + f - j);
            }
        }
        printf("%d\n", ans);
    }
    return 0;
}

 

 

posted on 2013-07-31 22:34  lzm风雨无阻  阅读(463)  评论(0编辑  收藏  举报

导航