제출 #927877

#제출 시각아이디문제언어결과실행 시간메모리
927877sleepntsheepFeast (NOI19_feast)C++17
100 / 100
489 ms25604 KiB
#include <cstdio> #include <cmath> #include <climits> #include <functional> #include <numeric> #include <cstring> #include <cassert> #include <string> #include <deque> #include <vector> #include <map> #include <queue> #include <algorithm> #include <iostream> #include <utility> using namespace std; using ll=long long; #define N 300005 #define ALL(x) x.begin(), x.end() int n, k, a[N]; long long p[N]; pair<long double, int> dp[N][2]; const long double EPS = 1e-3; int check(long double lambda) { dp[0][1] = make_pair(-1e18, 0); for (int i = 1; i <= n; ++i) { dp[i][0] = max({dp[i-1][0], dp[i-1][1]}); dp[i][1] = max(make_pair(dp[i-1][0].first + a[i] - lambda, dp[i-1][0].second + 1), make_pair(dp[i-1][1].first + a[i], dp[i-1][1].second)); } return max(dp[n][0], dp[n][1]).second >= k; } int main() { cin.tie(0)->sync_with_stdio(0); cin >> n >> k; for (int i = 1; i <= n; ++i) cin >> a[i]; long double l = 0, r = 1e18; while (l + EPS < r) { long double y = (l+r)/2; if (check(y)) l = y; else r = y; } check(l); cout << (long long)round(k * l + max(dp[n][0], dp[n][1]).first); 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...