Submission #371157

#TimeUsernameProblemLanguageResultExecution timeMemory
371157FystyBali Sculptures (APIO15_sculpture)C++17
100 / 100
125 ms512 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<ll,ll> pll; #define rep(i,n) for(ll i=0;i<n;i++) #define rep1(i,n) for(ll i=1;i<=n;i++) #define F first #define S second #define pb push_back const int INF=1e9; ll sum[2005],a[2005]; const ll maxN=1LL<<41; int main() { ll n,A,B; cin>>n>>A>>B; rep1(i,n) cin>>a[i]; rep1(i,n) sum[i]=sum[i-1]+a[i]; ll ans=maxN-1; if(A>1) { for(int t=40;t>=0;t--) { ll tmp=ans^(1LL<<t); vector<vector<bool> > dp(n+1,vector<bool>(n+1,0)); dp[0][0]=1; rep1(i,n) { rep1(j,min(i,B)) { for(int k=i-1;k>=0;k--) { if(dp[k][j-1]&&((sum[i]-sum[k])|tmp)<=tmp) { dp[i][j]=1; break; } } } } bool x=0; for(int i=A;i<=B;i++) if(dp[n][i]) x=1; if(x) ans=tmp; } } else { for(int t=40;t>=0;t--) { ll tmp=ans^(1LL<<t); vector<ll> dp(n+1,0); rep1(i,n) { dp[i]=INF; for(int j=i-1;j>=0;j--) { if(dp[j]+1<dp[i]&&((sum[i]-sum[j])|tmp)<=tmp) dp[i]=dp[j]+1; } } if(dp[n]<=B) ans=tmp; } } cout<<ans; }
#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...