제출 #1167717

#제출 시각아이디문제언어결과실행 시간메모리
1167717JelalTkmBali Sculptures (APIO15_sculpture)C++20
37 / 100
1 ms328 KiB
#include <bits/stdc++.h> #pragma GCC optimize ("O3") #pragma GCC target ("sse4") using namespace std; #define int long long int const int N = 1e5 + 10; const int md = 1e9 + 7; const int INF = 1e9; int32_t main(int32_t argc, char *argv[]) { ios::sync_with_stdio(false); cin.tie(nullptr); int T = 1; // cin >> T; while (T--) { int n, a, b; cin >> n >> a >> b; if (a != 1) { vector<int> v(n + 1), pref(n + 1); for (int i = 1; i <= n; i++) { cin >> v[i]; pref[i] = pref[i - 1] + v[i]; } int msk = (1ll << 45ll) - 1ll; // cout << msk << '\n'; int t_ans = 0; for (int m = 45; m >= 0; m--) { vector<vector<int>> dp(n + 1, vector<int> (b + 1)); dp[0][0] = 1; int ans = 0; for (int i = 1; i <= n; i++) { for (int k = 1; k <= b; k++) { for (int j = i - 1; j >= 0; j--) { int sm = (pref[i] - pref[j]); if ((sm | msk) == msk) dp[i][k] |= dp[j][k - 1]; } if (i == n && dp[i][k] > 0) ans = max(ans, k); } } if (ans < a) { msk |= (1 << m); t_ans |= (1 << m); } if (m != 0) msk ^= (1 << (m - 1)); } cout << t_ans << '\n'; } else { vector<int> v(n + 1), pref(n + 1); for (int i = 1; i <= n; i++) { cin >> v[i]; pref[i] = pref[i - 1] + v[i]; } int msk = (1ll << 45ll) - 1ll; // cout << msk << '\n'; int t_ans = 0; for (int m = 45; m >= 0; m--) { vector<int> dp(n + 1, INF); dp[0] = 0; int ans = 0; for (int i = 1; i <= n; i++) { for (int j = i - 1; j >= 0; j--) { int sm = (pref[i] - pref[j]); if ((sm | msk) == msk) dp[i] = min(dp[i], dp[j] + 1); } } if (dp[n] < a || dp[n] > b) { msk |= (1 << m); t_ans |= (1 << m); } if (m != 0) msk ^= (1 << (m - 1)); } cout << t_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...