Submission #1344194

#TimeUsernameProblemLanguageResultExecution timeMemory
1344194ThylOneBali Sculptures (APIO15_sculpture)C++20
0 / 100
1 ms344 KiB
//####################
//BaliSculture
//####################
#include<bits/stdc++.h> 



#define rall(x) x.rbegin(), x.rend()
#define eb emplace_back
#define pb push_back
#define all(x) x.begin(), x.end()
#define int long long 
using namespace std;
const int LOG = 31;
signed main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	int n,A,B;
	cin>>n>>A>>B;
	vector<int> vals(n);
	for(int &i:vals)cin>>i;
	int mask = 0;
	for(int b=0;b<LOG ; b++)mask|=(1<<b);

	auto possible = [&](int acceptable,pair<int,int> limits){
		vector<vector<bool>> dp(n+1,vector<bool>(n+1,false));
		for(int k = 0 ; k <= n ; k++)dp[n][k] = true;
		
		for(int k=1 ; k <= n ; k++){
			for(int pos = n-1 ; pos>=0 ; pos--){
				int sum(0);
				for(int i = pos ; i < n ; i++){
					sum += vals[i];
					if((sum|acceptable) == acceptable){//on est bon
						dp[pos][k] = dp[i+1][k-1];
						if(dp[pos][k])break;
					}
				}
			}
		}
		pair<int,int> n_inter = {n+1, -1};
		

		
		for(int g=limits.first; g<= limits.second; g++)if(dp[0][g]){
			if(dp[0][g]){
				n_inter.first = min(n_inter.first, g);
				n_inter.second = max(n_inter.second, g);
			}	
		}
		return n_inter;
	};
	pair<int,int> inter{A,B};
	for(int b = LOG-1 ; b>=0 ; b--){
		pair<int,int> re = possible(mask^(1<<b), inter);
		if(re.first<re.second){
			mask = (mask^(1<<b));
			inter = re;
		}
	}
	cout << mask << 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...