Submission #1212434

#TimeUsernameProblemLanguageResultExecution timeMemory
1212434dajeffFeast (NOI19_feast)C++20
4 / 100
151 ms9780 KiB
/*
5 2
1 -10 1 -10 1
*/

#include <bits/stdc++.h>

using namespace std;

using ll = long long;

int main() {
    int n, k;
    cin >> n >> k;
    
    ll a[n];
    for (int i = 0; i < n; ++i) {
        cin >> a[i];
    }
    
    double l = 0, r = 1e18, m, dp[n + 1][2];
    int cnt[n + 1][2];
    while (r - l > 1e-3) {
        m = (l + r) / 2;
        
        dp[0][0] = 0;
        dp[0][1] = -1e18;
        cnt[0][0] = cnt[0][1] = 0;
        for (int i = 0; i < n; ++i) {
            if (dp[i][0] < dp[i][1]) {
                dp[i + 1][0] = dp[i][1];
                cnt[i + 1][0] = cnt[i][1];
            } else {
                dp[i + 1][0] = dp[i][0];
                cnt[i + 1][0] = cnt[i][0];
            }
            
            double dp0 = dp[i][0] - m, dp1 = dp[i][1];
            if (dp0 < dp1) {
                dp[i + 1][1] = dp1 + a[i];
                cnt[i + 1][1] = cnt[i][1];
            } else {
                dp[i + 1][1] = dp0 + a[i];
                cnt[i + 1][1] = cnt[i][0] + 1;
            }
        }
        
        // cout << "cnt: " << (dp[n][0] < dp[n][1] ? cnt[n][1] : cnt[n][0]) << endl;
        
        if ((dp[n][0] < dp[n][1] ? cnt[n][1] : cnt[n][0]) <= k) {
            r = m;
        } else {
            l = m;
        }
        
        // cout << "lamb: " << m << endl;
    }
    
    cout << static_cast<ll>(round(dp[n][0] < dp[n][1] ? dp[n][1] + m * cnt[n][1] : dp[n][0] + m * cnt[n][0])) << endl;
    
    
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...