Submission #1236746

#TimeUsernameProblemLanguageResultExecution timeMemory
1236746ZeroCoolBali Sculptures (APIO15_sculpture)C++20
100 / 100
107 ms21668 KiB
#include <bits/stdc++.h>
using namespace std;;
#define ll long long
#define ar array
#define ld long double
#define int long long
#define all(v) v.begin(), v.end()

const int N = 3e5 + 20;
const int M = 20;
const int LOG = 40;
const int INF = 1e17;	
int MOD = 1e9 + 7;
const ld EPS = 1e-12;

template<typename T>
inline void chmin(T &x,T y){x = min(x, y);}
template<typename T>
inline void chmax(T &x,T y){x = max(x, y);}
inline void mm(int &x){x = (x % MOD + MOD) % MOD;};

int n, a, b;
int A[N];

void sub1(){
	int ans = 0;

	for(int k = LOG;k >= 0;k--){
		bool dp[n + 1][n + 1];
		memset(dp, 0, sizeof dp);
		dp[0][0] = 1;
		for(int i = 0;i < n;i++){
			for(int j = 0;j < n;j++){
				//if(k == 1)cout<<dp[i][j];
				if(!dp[i][j])continue;
				int sum = 0;
				for(int x = i;x < n;x++){
					sum += A[x];
					int s = sum;
					s >>=k;
					s <<= k;
					s |= ans;
					if(s == ans){
						//if(k == 1)cout<<i<<" "<<x<<" "<<sum<<'\n';
						dp[x + 1][j + 1] = 1;
					}
				}
			}
			//if(k == 1)cout<<'\n';
		}
		bool f = 0;
		for(int i = a;i <= b;i++){
			if(dp[n][i]) f = 1;
		}
		if(!f)ans += (1ll << k);
	}

	cout<<ans<<'\n';
}
void sub2(){
	int ans = 0;
	for(int k = LOG ;k >= 0;k--){
		vector<int> g[n + 1];
		for(int i = 0;i < n;i++){
			int sum = 0;
			for(int j = i;j < n;j++){
				sum += A[j];
				int s = sum;
				s >>=k;
				s <<= k;
				s |= ans;
				if(s == ans)g[i].push_back(j + 1);
			}
		}
		int dp[n + 1];
		memset(dp, 0x3f, sizeof dp);
		dp[0] = 0;
		for(int i = 0;i < n;i++){
			for(auto u: g[i])chmin(dp[u], dp[i] + 1);
		}
		//cout<<k<<" "<<dp[n]<<'\n';
		if(dp[n] > b)ans += (1ll << k);	
	}
	cout<<ans;
}

void orz(){
	cin>>n>>a>>b;
	for(int i = 0;i < n;i++)cin>>A[i];
	if(a != 1)sub1();
	else sub2();
}

signed main() {
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	int t = 1;
	//cin>>t;
	while (t--)orz();
}//DAG dp for n > 100, n^3 dp for n < 100
#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...