Submission #160903

#TimeUsernameProblemLanguageResultExecution timeMemory
160903nvmdavaBali Sculptures (APIO15_sculpture)C++17
100 / 100
151 ms760 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define ff first #define ss second mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); #define N 2005 #define INF 0x3f3f3f3f3f3f3f3f #define MOD 1000000007LL ll p[N]; int dp1[N]; bool dp[505][505]; int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n, a, b; cin>>n>>a>>b; ll res = 0; for(int i = 1; i <= n; i++){ cin>>p[i]; p[i] += p[i - 1]; } for(ll k = 45; k >= 0; k--){ if(a == 1){ memset(dp1, 0x3f, sizeof dp1); dp1[0] = 0; } else { memset(dp, 0, sizeof dp); dp[0][0] = 1; } for(int i = 1; i <= n; i++){ for(int j = 1; j <= i; j++){ if( (((p[i] - p[j - 1]) >> k ) | (res >> k)) != (res >> k) ) continue; if(a == 1){ dp1[i] = min(dp1[i], dp1[j - 1] + 1); } else { for(int l = 0; l < j; l++){ if(dp[j - 1][l]){ dp[i][l + 1] = 1; } } } } } if(a == 1){ if(dp1[n] > b) res += 1LL << k; } else { res += 1LL << k; for(int j = a; j <= b; j++){ if(dp[n][j]){ res -= 1LL << k; break; } } } } cout<<res; }
#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...