제출 #416450

#제출 시각아이디문제언어결과실행 시간메모리
416450Aldas25Feast (NOI19_feast)C++14
100 / 100
157 ms12868 KiB
#include <bits/stdc++.h> using namespace std; #define FAST_IO ios_base::sync_with_stdio(0); cin.tie(0) #define FOR(i, a, b) for(int i = (a); i <= (b); i++) #define REP(n) FOR(O, 1, (n)) #define pb push_back #define f first #define s second typedef long double ld; typedef long long ll; typedef pair<int, int> pii; typedef pair<int, pii> piii; typedef vector<int> vi; typedef vector<pii> vii; typedef vector<ll> vl; typedef vector<piii> viii; const int MAXN = 300100, MAXK = 30; //const ll MOD = 998244353; const ll INF = 1e13; const ld PI = asin(1) * 2; const ld EPS = 1e-6; ll n, k; ll a[MAXN]; ll pref[MAXN]; ll dp[MAXN]; ll cnt[MAXN]; void calc (ll lambda) { //cout << fixed << setprecision(3) << " lambda = " << lambda << endl; int bg = 0; FOR(i, 1, n) { if (dp[bg] + pref[i] - pref[bg] - lambda > dp[i-1]) { dp[i] = dp[bg] + pref[i] - pref[bg] - lambda; cnt[i] = cnt[bg]+1; } else { dp[i] = dp[i-1]; cnt[i] = cnt[i-1]; } if (dp[bg] - pref[bg] < dp[i] - pref[i]) { bg = i; } // cout << fixed << setprecision(2) << " i = " << i << " dp = " << dp[i] << " pref = " << pref[i] << " bg = " << bg << " cnt = " << cnt[i] << endl; } } int main() { FAST_IO; cin >> n >> k; FOR(i, 1, n) cin >> a[i]; FOR(i, 1, n) pref[i] = pref[i-1] + a[i]; ll le = 0, ri = INF; while (le < ri) { ll mid = (le+ri)/2; calc (mid); if (cnt[n] <= k) ri = mid; else le = mid+1; } calc (le); //ll ans = (ll)(round(dp[n] + cnt[n]*le)); ll ans = dp[n] + cnt[n]*le; cout << ans << "\n"; 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...