タイトル
解決
シーケンス\(\ {a_iを\} \) 、設定\([L、R] \ ) の平均値(\ \バー{X} \)がある(\ \ sum_ {i = L } ^ R( a_i- \バー{X})=
0 \) ので、我々は、2つの点を平均化することができる
保存が割り当てられる平均値と第2、及び0以上、いくつかの間隔がある場合、この間隔を示すことは2に等しい平均値よりも大きいですスコアは、国境を提起し、または他の境界線をカット
コード
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
const int INF = 0x3f3f3f3f;
const double EPS = 1e-9;
int n, m;
double a[N], sum[N];
int main() {
ios::sync_with_stdio(false);
cin >> n >> m;
for (int i = 1; i <= n; ++i) cin >> a[i];
double l = -1000000.0, r = 1000000.0;
while (r - l > EPS) {
double mid = (l + r) / 2;
for (int i = 1; i <= n; ++i) sum[i] = a[i] - mid + sum[i - 1];
double ans = -INF, mn = INF;
for (int i = m; i <= n; ++i)
mn = min(mn, sum[i - m]), ans = max(ans, sum[i] - mn);
if (ans >= 0) l = mid;
else r = mid;
}
cout << int(r * 1000);
}