Submission #101325

#TimeUsernameProblemLanguageResultExecution timeMemory
101325arman_ferdousBali Sculptures (APIO15_sculpture)C++17
100 / 100
186 ms512 KiB
#include <bits/stdc++.h>
using namespace std;

using ll = long long;
const int N = 2010;

int n, A, B;
ll a[N], mask, bitpos;

int dp4[105][105];
int DP4(int pos, int parts) {
	if(pos > n) {
		if(A <= parts && parts <= B) return 1;
		return 0;
	}
	if(dp4[pos][parts] != -1) return dp4[pos][parts];

	int &ret = dp4[pos][parts]; ret = 0;
	ll s = 0;
	for(int i = pos; i <= n; i++) {
		s += a[i];
		if(((mask >> bitpos) & (s >> bitpos)) == (s>>bitpos)) ret |= DP4(i+1, parts+1);
	}
	return ret;
}

int dp5[N];
int DP5(int pos) {
	if(pos > n) return 0;
	if(dp5[pos] != -1) return dp5[pos];

	int &ret = dp5[pos]; ret = N;
	ll s = 0;
	for(int i = pos; i <= n; i++) {
		s += a[i];
		if(((mask >> bitpos) & (s >> bitpos)) == (s>>bitpos)) 
			ret = min(ret, DP5(i+1) + 1);
	} return ret;
}

int main() {
	scanf("%d %d %d", &n, &A, &B);
	for(int i = 1; i <= n; i++)
		scanf("%lld", &a[i]);
	for(bitpos = 45; bitpos >= 0; bitpos--) {
		if(A == 1) {
			memset(dp5, -1, sizeof dp5);
			if(DP5(1) > B) mask |= (1ll<<bitpos);
		} else {
			memset(dp4, -1, sizeof dp4);
			if(!DP4(1,0)) mask |= (1ll<<bitpos);
		}
	}
	printf("%lld\n", mask);
	return 0;
}

Compilation message (stderr)

sculpture.cpp: In function 'int main()':
sculpture.cpp:42:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d %d %d", &n, &A, &B);
  ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
sculpture.cpp:44:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%lld", &a[i]);
   ~~~~~^~~~~~~~~~~~~~~
#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...