제출 #1212021

#제출 시각아이디문제언어결과실행 시간메모리
1212021A_M_NamdarBali Sculptures (APIO15_sculpture)C++20
0 / 100
0 ms328 KiB
#include <bits/stdc++.h>
using namespace std;

const long long N = 100 + 10, M = 1e3 + 10;
long long n, l, r, a[M], dp[N][N], dp2[M];

bool check(long long x) {
	for (long long i = 0; i < n; i++) {
		dp2[i + 1] = 1e9 + 10;
		long long s = 0;
		for (long long j = i; j >= 0; j--) {
			s += a[j];
			if ((s & x) == s) 
				dp2[i] = min(dp2[i], dp2[j] + 1);
		}
	}
	return dp2[n] <= r;
}

void input() {
	cin >> n >> l >> r;
	for (long long i = 0; i < n; i++) 
		cin >> a[i];
}

void solve() {
	if (n <= 100) {
		memset(dp, 63, sizeof dp);
		dp[0][0] = 0;
		for (long long i = 0; i < n; i++) {
			for (long long j = 0; j <= i; j++) {
				long long s = 0;
				for (long long k = i; k < n; k++) {
					s += a[k];
					dp[k + 1][j + 1] = min(dp[k + 1][j + 1], (dp[i][j] | s));
				}
			}
		}
		long long ans = 1e9 + 10;
		for (long long i = l; i <= r; i++) 
			ans = min(ans, dp[n][i]);
		cout << ans;
	}
	else {
		long long l = -1, r = 1e9 + 10;
		while (r - l > 1) {
			long long mid = (l + r) / 2;
			if (check(mid)) r = mid;
			else            l = mid;
		}
		cout << r << '\n';
	}
}

int main() {
	ios:: sync_with_stdio(0), cin.tie(0), cout.tie(0);
	input();
	solve();
}
#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...