Submission #231025

#TimeUsernameProblemLanguageResultExecution timeMemory
231025peijarBali Sculptures (APIO15_sculpture)C++17
50 / 100
483 ms504 KiB
#include <bits/stdc++.h>
using namespace std;

#define SZ(v) ((int)(v).size())
using ll = long long;

const int MAXP = 60;

int nb_sculptures, min_parti, max_parti;
vector<ll> valeur;

void read_in()
{
	cin >> nb_sculptures >> min_parti >> max_parti;
	valeur.resize(nb_sculptures);

	for (auto &v : valeur)
		cin >> v;
}

void solve_a1(void)
{
	ll cur_prefix=0;
	ll mask=0;
	auto try_prefix = [&](void) 
	{
		vector<int> dp(nb_sculptures+1);
		dp[nb_sculptures] = 0;
		for (int i(nb_sculptures-1); i >= 0; --i)
		{
			dp[i] = 1e9;
			ll sum(0);
			for (int nxt(i); nxt < nb_sculptures; ++nxt)
			{
				sum += valeur[nxt];
				if (((sum & mask) & cur_prefix) == (sum & mask))
					dp[i] = min(dp[i], 1 + dp[nxt+1]);
			}
		}
		return dp[0] <= max_parti;
	};

	for (ll p(MAXP-1); p >= 0; --p)
	{
		mask += (1LL<<p);
		if (!try_prefix())
			cur_prefix += (1LL<<p);
		assert(try_prefix());
	}
	cout << cur_prefix << endl;
}

int main(void)
{
	ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);

	read_in();
	solve_a1();
}
#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...