제출 #1319626

#제출 시각아이디문제언어결과실행 시간메모리
1319626husseinjuandaBali Sculptures (APIO15_sculpture)C++20
100 / 100
61 ms504 KiB
#include <bits/stdc++.h> using namespace std; #define int long long signed main(){ ios::sync_with_stdio(false); cin.tie(0); int n, a, b; cin >> n >> a >> b; vector<int> x(n+1); for(int i = 1; i <= n; i++){ cin >> x[i]; } if(n <= 100){ int cur = (1LL<<44)-1; for(int i = 43; i >= 0; i--){ cur -= (1LL<<i); vector<vector<int>> dp(n+1, vector<int>(n+1)); dp[0][0] = 1; vector<pair<int, int>> q; for(int i = 1; i <= n; i++){ int sum = 0; for(int y = i; y <= n; y++){ sum += x[y]; if((sum|cur) == cur){ for(int z = 1; z <= n; z++){ dp[y][z] |= dp[i-1][z-1]; } } } } bool j = false; for(int y = a; y <= b; y++){ if(dp[n][y]){ j = true; } } if(!j){ cur += (1LL<<i); } } cout << cur << "\n"; }else{ int cur = (1LL<<44)-1; for(int i = 43; i >= 0; i--){ cur -= (1LL<<i); vector<int> dp(n+1, 1e18); dp[0] = 0; vector<pair<int, int>> q; for(int i = 1; i <= n; i++){ int sum = 0; for(int y = i; y <= n; y++){ sum += x[y]; if((sum|cur) == cur){ dp[y] = min(dp[y], dp[i-1]+1); } } } if(dp[n] > b){ cur += (1LL<<i); } } cout << cur << "\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...