Submission #404104

#TimeUsernameProblemLanguageResultExecution timeMemory
404104ritul_kr_singhBali Sculptures (APIO15_sculpture)C++17
100 / 100
136 ms452 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define sp << ' ' <<
#define nl << '\n'

const int MAXN = 2000;

int n, a, b, y[MAXN + 1] = {0};

signed main(){
	cin.tie(0)->sync_with_stdio(0);
	cin >> n >> a >> b;
	for(int i=1; i<=n; ++i) cin >> y[i], y[i] += y[i-1];

	int bad = 0, ans = 0;

	for(int m=43; m>=0; --m){
		bad |= 1LL << m;
		if(a < 2){
			int dp[n+1] = {0};
			for(int i=1; i<=n; ++i){
				dp[i] = n + 1;
				for(int j=0; j<i; ++j){
					if(!(bad & (y[i]-y[j]))) dp[i] = min(dp[i], dp[j] + 1);
				}
			}
			if(dp[n] > b) bad ^= 1LL << m, ans ^= 1LL << m;
		}else{
			bool dp[n+1][n+1];
			for(int i=0; i<=n; ++i) fill(dp[i], dp[i]+n+1, 0);
			dp[0][0] = 1;
			for(int i=1; i<=n; ++i){
				for(int j=0; j<i; ++j){
					if(bad & (y[i]-y[j])) continue;
					for(int k=1; k<=n; ++k)	dp[i][k] = dp[i][k] || dp[j][k-1];
				}
			}
			bool ok = false;
			for(int i=a; i<=b; ++i) ok = ok || dp[n][i];
			if(!ok) bad ^= 1LL << m, ans ^= 1LL << m;
		}
	}
	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...