loj#10012 \ poj2018ベスト牛フェンス(半分)

タイトル

#10012ベスト牛のフェンス「2を通じて1.2例」

解決

シーケンス\(\ {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);
}

おすすめ

転載: www.cnblogs.com/lykkk/p/11230662.html