标签:des style http color os io strong for
斜率优化DP。。。《浅谈数形结合思想在信息学竞赛中的应用 安徽省芜湖一中 周源》例题。。。
Best Cow Fences
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 Source |
[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; }
POJ 2018 Best Cow Fences,布布扣,bubuko.com
标签:des style http color os io strong for
原文地址:http://blog.csdn.net/ck_boss/article/details/38568025