Submission #257485

#TimeUsernameProblemLanguageResultExecution timeMemory
257485karmaFeast (NOI19_feast)C++14
30 / 100
133 ms13536 KiB
#include <bits/stdc++.h> #define pb emplace_back #define ll long long #define fi first #define se second #define mp make_pair //#define int int64_t using namespace std; const int N = int(6e5) + 7; typedef pair<int, int> pii; ll f[N][2]; int cnt[N][2], n, k, a[N]; /// 0 - ok /// 1 - opening int check(ll mid) { f[0][0] = 0, f[0][1] = -mid; cnt[0][0] = 0, cnt[0][1] = 1; for(int i = 1; i <= n; ++i) { if(f[i - 1][0] > f[i - 1][1] + a[i]) { f[i][0] = f[i - 1][0]; cnt[i][0] = cnt[i - 1][0]; } else if(f[i - 1][0] < f[i - 1][1] + a[i]) { f[i][0] = f[i - 1][1] + a[i]; cnt[i][0] = cnt[i - 1][1]; } else { f[i][0] = f[i - 1][0]; cnt[i][0] = min(cnt[i - 1][0], cnt[i - 1][1]); } if(f[i - 1][1] + a[i] > f[i - 1][0] + a[i] - mid) { f[i][1] = f[i - 1][1] + a[i]; cnt[i][1] = cnt[i - 1][1]; } else if(f[i - 1][1] + a[i] < f[i - 1][0] + a[i] - mid) { f[i][1] = f[i - 1][0] + a[i] - mid; cnt[i][1] = cnt[i - 1][0] + 1; } else { f[i][1] = f[i - 1][1] + a[i]; cnt[i][1] = min(cnt[i - 1][0] + 1, cnt[i - 1][1]); } } return cnt[n][0]; } int32_t main() { ios_base::sync_with_stdio(0); cin.tie(0), cout.tie(0); #define Task "test" if(fopen(Task".inp", "r")) { freopen(Task".inp", "r", stdin); freopen(Task".out", "w", stdout); } cin >> n >> k; for(int i = 1; i <= n; ++i) cin >> a[i]; n += k; ll low = 0, mid, high = 1ll * n * (int)1e9; while(low <= high) { mid = (low + high) >> 1; if(check(mid) > k) low = mid + 1; else high = mid - 1; } check(low); cout << f[n][0] + 1ll * low * k; }

Compilation message (stderr)

feast.cpp: In function 'int32_t main()':
feast.cpp:53:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)', declared with attribute warn_unused_result [-Wunused-result]
         freopen(Task".inp", "r", stdin);
         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
feast.cpp:54:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)', declared with attribute warn_unused_result [-Wunused-result]
         freopen(Task".out", "w", stdout);
         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
#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...