Poj 2018 best cow fences

Source: Internet
Author: User


Slope optimization DP... An example of the application of the combination of data and shapes in the competition of informatics in Wuhu, Anhui Province, China...


Best cow fences
Time limit:1000 ms   Memory limit:30000 K
Total submissions:9311   Accepted:2986

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 66 4210385941

Sample output

6500

Source

Usaco 2003 March green

[Submit] [Go Back] [Status] [discuss]




#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int maxn=100100;int sum[maxn],n,f;int stack[maxn],top;bool cmp(int a,int b,int c){    int x1,x2,y1,y2;    y1=sum[b]-sum[a];    x1=b-a;    y2=sum[c]-sum[b];    x2=c-b;    return y1*x2-y2*x1<=0;}double calu(int a,int b){    return (double)(sum[b]-sum[a])/(double)(b-a);}int main(){    while(scanf("%d%d",&n,&f)!=EOF)    {        double ans=0.;        for(int i=1;i<=n;i++)        {            int x;            scanf("%d",&x);            sum[i]=sum[i-1]+x;        }        top=0;        for(int i=0;i<=n-f;i++)        {            while(top>=1&&cmp(stack[top-1],stack[top],i)==false)                top--;            stack[++top]=i;            int j=top;            while(j>=1&&cmp(stack[j-1],stack[j],i+f)==false)                j--;            ans=max(ans,calu(stack[j],i+f));        }        printf("%d\n",(int)(ans*1000));    }    return 0;}


Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.