제출 #322206

#제출 시각아이디문제언어결과실행 시간메모리
322206SaynaaBali Sculptures (APIO15_sculpture)C++14
100 / 100
87 ms4480 KiB
#include<bits/stdc++.h>

using namespace std;
typedef long long ll;
const int MAXN = 2000 + 5;
const ll ziad = 1e15 + 10;
int n, a[MAXN], A, B;
ll mx = 0;
bool ok[MAXN][MAXN];
ll dp[MAXN];


int main(){
	ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
	cin >> n >> A >> B;
	for(int i = 0; i < n; i ++)
		cin >> a[i];
	
	if( n <= 300){
	for(int b = 40; b >= 0; b --){
		memset(ok, false, sizeof ok);
		ok[0][0] = true;
		//if( (a[0] & mx) == 0) ok[1][1] = true;
		mx ^= (1LL << b);
		for(int t = 0; t <= n; t ++){
			for(int i = 0; i < n; i ++){
				if( !ok[i][t] ) continue;
				ll sum = 0;
				for(int h = i; h < n; h ++){
					sum += (ll)a[h];
					if( (sum & mx) == 0) ok[h + 1][t + 1] = true;
				}
			}
		}
		bool bit = false;
		for(int i = A; i <= B; i ++)
			bit |= ok[n][i];
		if( !bit )
				mx ^= (1LL << b);
	}
//	cout << mx << endl;
	mx = (1LL << 41) - 1 - mx;
	cout << mx << endl;
	return 0;
	}
	for(int b = 40; b >= 0; b --){
		fill(dp, dp + n + 1, ziad);
		dp[0] = 0;
	//	bool bit = false;
		//if( (a[0] & mx) == 0) ok[1][1] = true;
		mx ^= (1LL << b);
	//	for(int t = 0; t <= n; t ++){
		for(int i = 0; i < n; i ++){
			if( dp[i] >= B ) continue;
			ll sum = 0;
			for(int h = i; h < n; h ++){
				sum += (ll)a[h];
				if( (sum & mx) == 0){
					dp[h + 1] = min(dp[h + 1], dp[i] + 1);
					//
				}
			}
			
		}
	//	}
		if( dp[n] > B )
				mx ^= (1LL << b);
	}
	
	mx = (1LL << 41) - 1 - mx;
	cout << mx << endl;
	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...