Submission #915929

#TimeUsernameProblemLanguageResultExecution timeMemory
915929AlphaMale06Bali Sculptures (APIO15_sculpture)C++14
100 / 100
105 ms600 KiB
#include <bits/stdc++.h> using namespace std; #define int long long int n, l, r; int a[2050]; bool moves[101][101]; bool check1(int val){ for(int i=0; i<=100; i++){ for(int j=0; j<=100; j++)moves[i][j]=0; } moves[0][0]=1; for(int i=1; i<=n; i++){ int sum=0; for(int j=i-1; j>=0; j--){ sum+=a[j]; if((sum&val)==sum){ for(int k=0; k<=j; k++){ moves[i][k+1]|=moves[j][k]; } } } } for(int i=l; i<=r; i++){ if(moves[n][i])return 1; } return 0; } int dp[2050]; bool check2(int val){ dp[0]=0; for(int i=1; i<=n; i++){ dp[i]=1e9; int sum=0; for(int j=i-1; j>=0; j--){ sum+=a[j]; if((sum&val)==sum){ dp[i]=min(dp[i], dp[j]+1); } } } return (dp[n]<=r); } signed main() { ios_base::sync_with_stdio(0); cin.tie(0); cin >> n >> l >> r;; for(int i=0; i< n; i++)cin >> a[i]; int ans=(1ll<<50)-1; for(int i=49; i>=0; i--){ if(n<=100 && check1(ans-(1ll<<i)))ans-=1ll<<i; if(n>100 && check2(ans-(1ll<<i)))ans-=1ll<<i; } cout << ans << '\n'; }
#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...