Submission #676865

#TimeUsernameProblemLanguageResultExecution timeMemory
676865ArnchBali Sculptures (APIO15_sculpture)C++17
75 / 100
94 ms1116 KiB
// oooo
/*
 har chi delet mikhad bebar ~
 gitar o ba khodet nabar! ~
 ;Amoo_Hasan;
*/

/*
	link:	
*/

#include<bits/stdc++.h>
//#pragma GCC optimize("O3,no-stack-protector,unroll-loops")
//#pragma GCC target("avx2,fma")

using namespace std;

typedef long long ll;
typedef long double ld;

#define Sz(x) int((x).size())
#define All(x) (x).begin(), (x).end()
#define wtf(x) cout<<#x <<" : " <<x <<endl
#define mak make_pair

//constexpr int PRI = 1000696969;
constexpr ll INF = 1e18, N = 2e3 + 10, MOD = 1e9 + 7;

int n, A, B;
ll a[N], dp[N], ps[N][50];

bool ok(ll x) {
	if(A == 1) {
		ll sum = 0;
		dp[0] = 0;
		for(int i = 1; i <= n; i++) {
			dp[i] = INF;
			sum = 0;
			for(int j = i; j >= 1; j--) {
				sum += a[j];
				if((sum & x) == sum) dp[i] = min(dp[i], dp[j - 1] + 1);
			}
		}	
		if(dp[n] <= B) return true;
		return false;
	}
	memset(ps, 0, sizeof(ps));
	ps[0][0] = 1;
	for(int i = 1; i < 42; i++) {
		for(int j = 1; j <= n; j++) {
			ll sum = 0;
			for(int k = j; k >= 1; k--) {
				sum += a[k];
				if((sum & x) == sum) ps[j][i] |= ps[k - 1][i - 1];
			}
		}
	}
	for(int i = A; i <= B; i++) if(ps[n][i] == 1) return 1;
	return 0;
}	

int main() {
	ios :: sync_with_stdio(0), cin.tie(0); cout.tie(0);

	cin >>n >>A >>B;
	for(int i = 1; i <= n; i++) cin >>a[i];
	
	ll ans = 0;
	for(int i = 42; i >= 0; i--) {
		if(ok(ans + (1ll << i) - 1)) continue;
		ans |= (1ll << i);
	}

	cout<<ans;

	
	return 0;
}


#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...