제출 #1171993

#제출 시각아이디문제언어결과실행 시간메모리
1171993dmitryAdamsFeast (NOI19_feast)C++20
30 / 100
421 ms33096 KiB
#include "bits/stdc++.h" using namespace std; # define int long long # define all(a) a.begin(), a.end() vector<int> a; int n, k; const int INF = 1e36; using int128_t = __int128_t; vector<vector<pair<int128_t, int128_t>>> dp; pair<int128_t, int128_t> check(int128_t x){ dp.assign(n + 1, vector<pair<int128_t, int128_t>>(2, {-INF, 0})); dp[0][1] = {0, 0}; for(int i = 1; i <= n; ++i){ dp[i][0] = dp[i - 1][0]; dp[i][0].first += a[i - 1]; dp[i][1] = max(dp[i][0], dp[i - 1][1]); dp[i][0] = max(dp[i][0], {dp[i - 1][1].first + x + a[i - 1], dp[i - 1][1].second - 1}); } return max(dp[n][0], dp[n][1]); } signed main(){ ios::sync_with_stdio(false); cin.tie(nullptr); #ifdef LOCAL freopen("in.txt", "r", stdin); freopen("out.txt", "w", stdout); #endif cin >> n >> k; a.resize(n); for(auto &i : a) cin >> i; int128_t l = -1e18, r = 100; while(r - l > 1){ int m = (r + l) / 2; if(-check(m).second >= k){ r = m; } else { l = m; } } cout << (int)(check(r).first + r * check(r).second) << '\n'; return 0; }

컴파일 시 표준 에러 (stderr) 메시지

feast.cpp:7:17: warning: overflow in conversion from 'double' to 'long long int' changes value from '1.0e+36' to '9223372036854775807' [-Woverflow]
    7 | const int INF = 1e36;
      |                 ^~~~
#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...