제출 #1017676

#제출 시각아이디문제언어결과실행 시간메모리
1017676vjudge1Feast (NOI19_feast)C++17
100 / 100
75 ms8668 KiB
#include <bits/stdc++.h> using namespace std; long long dp[300001][2]; int cnt[300001][2]; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); int n,k; cin >> n >> k; int a[n+1]; for (int i = 1; i <= n; cin >> a[i++]) {} long long l = 0, r = 1e11, ans; while (r > l) { long long lambda = (l+r)/2; dp[0][0] = 0; cnt[0][0] = 0; dp[0][1] = -1e18; for (int i = 1; i <= n; i++) { if (dp[i-1][0] > dp[i-1][1]) { dp[i][0] = dp[i-1][0]; cnt[i][0] = cnt[i-1][0]; } else { dp[i][0]= dp[i-1][1]; cnt[i][0] = cnt[i-1][1]; } if (dp[i-1][0] - lambda > dp[i-1][1]) { dp[i][1] = dp[i-1][0] - lambda + a[i]; cnt[i][1] = cnt[i-1][0] + 1; } else { dp[i][1] = dp[i-1][1] + a[i]; cnt[i][1] = cnt[i-1][1]; } } double friends; if (dp[n][0] > dp[n][1]) { ans = dp[n][0] + lambda*cnt[n][0]; friends = cnt[n][0]; } else { ans = dp[n][1] + lambda*cnt[n][1]; friends = cnt[n][1]; } if (friends == k) { break; } if (friends > k) l = lambda+1; else r = lambda-1; } cout << ans; }
#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...