Submission #1313255

#TimeUsernameProblemLanguageResultExecution timeMemory
1313255danglayloi1Bali Sculptures (APIO15_sculpture)C++20
100 / 100
60 ms464 KiB
#include <bits/stdc++.h> #define ii pair<int, int> #define fi first #define se second #define inf 0x3f3f3f3f3f3f3f3f using namespace std; using ll = long long; const ll mod=1e9+7; const int nx=2e3+5; const int LG=41; int n, a[nx], A, B, dp[nx]; ll cur=0, base=0, pre[nx]; bool f[105][105], can[nx]; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin>>n>>A>>B; for(int i = 1; i <= n; i++) cin>>a[i], pre[i]=pre[i-1]+a[i]; if(n<=100) { for(int i = A; i <= B; i++) can[i]=1; for(int bit = LG-1; bit >= 0; bit--) { base|=(1ll<<bit); memset(f, 0, sizeof(f)); f[0][0]=1; for(int i = 1; i <= n; i++) { for(int j = 1; j <= B; j++) { for(int k = 0; k < i; k++) { if(!f[k][j-1]) continue; ll tmp=(pre[i]-pre[k])&base; if((tmp&cur)==tmp) f[i][j]=1; } } } bool ok=0; for(int i = A; i <= B; i++) if(f[n][i] && can[i]) ok=1; if(ok) { for(int i = A; i <= B; i++) if(!f[n][i]) can[i]=0; } else cur|=(1ll<<bit); } return cout<<cur, 0; } for(int i = A; i <= B; i++) can[i]=1; for(int bit = LG-1; bit >= 0; bit--) { base|=(1ll<<bit); memset(dp, 0x3f, sizeof(dp)); dp[0]=0; for(int i = 1; i <= n; i++) { for(int j = 0; j < i; j++) { ll tmp=(pre[i]-pre[j])&base; if((tmp&cur)==tmp) dp[i]=min(dp[i], dp[j]+1); } } if(dp[n]>B) cur|=(1ll<<bit); } cout<<cur; }
#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...