最佳牛问题简析
原题目如下
代码如下
#include<bits/stdc++.h>
using namespace std;
const int N = 100010;
double sum[N] ={0};
int cows[N];
int n,f;
bool check(double avg) {
for (int i = 1; i <= n; i++)
{
sum[i] = sum[i - 1] + cows[i] - avg;
}//求前缀和的同时给每一个数减去同一个数
double minv = 0;
for (int i = 0, j = f; j <= n; j++, i++)
{
minv = min(minv, sum[i]);
//在0到j - f这个范围内sum【i】的最小值
if(sum[j] - minv >= 0) return true;
}
return false;
}
int main()
{
cin >> n >> f;
for (int i = 1; i <= n; i++)
{
cin >> cows[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\n", (int)(r * 1000));
}