답안 #33730

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
33730 2017-11-01T08:48:11 Z sinhriv Bali Sculptures (APIO15_sculpture) C++14
71 / 100
49 ms 2052 KB
#include <bits/stdc++.h>

using namespace std;

const int N = 130;

int n, a, b;

int f[N];
int arr[N];
long long sum[N];

void small(){
	long long ans = sum[n];

	for(int mask = 0; mask < (1 << (n - 1)); ++mask){
		int cnt = __builtin_popcount(mask) + 1;
		if(cnt < a || cnt > b) continue;

		long long curr = 0, now = 0;

		for(int i = 1; i <= n; ++i){
			curr += arr[i];
			if(mask & (1 << (i - 1))){
				now |= curr;
				curr = 0;
			}
		}
		now |= curr;
		ans = min(ans, now);
	}
	cout << ans;
}

void Medium(){
	for(int value = 0; value < (1 << 11); ++value){
		memset(f, 60, sizeof f);
		f[0] = 0;

		for(int i = 1; i <= n; ++i){
			for(int j = i - 1; j >= 0; --j){
				if((value | (sum[i] - sum[j])) == value){
					f[i] = min(f[i], f[j] + 1);
				}
			}
		}
		if(f[n] <= b){
			cout << value;
			return;
		}
	}
}

bool g[N][N];
bool now[N][N];

void Big(){
	memset(g, true, sizeof g);

	long long ans = 0;

	for(int bit = 40; bit >= 0; --bit){
		memset(now, false, sizeof now);
		now[0][0] = true;

		for(int i = 1; i <= n; ++i){
			for(int j = 1; j <= i; ++j){
				if(g[i][j] == false) continue;
				

				for(int k = i - 1; k >= j - 1; --k){

					long long tot = sum[i] - sum[k];
					
					tot = ((ans | tot) ^ ans);

					tot = (tot >= (1LL << bit));

					if(now[k][j - 1] == true && tot == 0){
						now[i][j] = true;
						break;
					}
				}
			}
		}
		
		bool fine = false;

		for(int x = a; x <= b; ++x){
			if(now[n][x]){
				fine = true;
				break;
			}
		}
		
		if(!fine){
			ans += (1LL << bit);

		}
		else{
			for(int i = 0; i <= n; ++i){
				for(int j = 0; j <= n; ++j){
					g[i][j] = now[i][j];
				}
			}
		}
	}
	cout << ans << endl;
}

int p[N];
int q[N];
int sz = 0;
int lst[N];

void Biggest(){

	long long ans = 0;

	for(int bit = 41; bit >= 0; --bit){
		memset(p, 60, sizeof p);

		p[0] = 0;

		sz = 0;
		lst[++sz] = 0;

		for(int i = 1; i <= n; ++i){
			if(q[i] > b) continue;
			
			for(int it = 1; it <= sz; ++it){
				int j = lst[it];
				long long tot = sum[i] - sum[j];

				tot = (ans | tot) ^ ans;
				tot = (tot < (1LL << bit));
				if(tot){
					p[i] = min(p[i], p[j] + 1);
				}
			}
			if(p[i] <= b) lst[++sz] = i;
		}
		
		if(p[n] <= b){
			for(int i = 1; i <= n; ++i){
				q[i] = p[i];
			}
		}
		else{
			ans += (1LL << bit);
		}
	}

	cout << ans << endl;
}

int main(){
	if(fopen("1.inp", "r")){
		freopen("1.inp", "r", stdin);
	}

	cin >> n >> a >> b;



	for(int i = 1; i <= n; ++i){
		cin >> arr[i];
		sum[i] = arr[i] + sum[i - 1];
	}


	if(n <= 20) small();
	else{
		if(sum[n] <= 2000 && n <= 100) Medium();
		else if(n <= 100) Big();
		else{
			Biggest();
		}
	}	

	return 0;
}

Compilation message

sculpture.cpp: In function 'int main()':
sculpture.cpp:159:31: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)', declared with attribute warn_unused_result [-Wunused-result]
   freopen("1.inp", "r", stdin);
                               ^
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 2052 KB Output is correct
2 Correct 0 ms 2052 KB Output is correct
3 Correct 0 ms 2052 KB Output is correct
4 Correct 0 ms 2052 KB Output is correct
5 Correct 0 ms 2052 KB Output is correct
6 Correct 0 ms 2052 KB Output is correct
7 Correct 0 ms 2052 KB Output is correct
8 Correct 0 ms 2052 KB Output is correct
9 Correct 0 ms 2052 KB Output is correct
10 Correct 3 ms 2052 KB Output is correct
11 Correct 3 ms 2052 KB Output is correct
12 Correct 0 ms 2052 KB Output is correct
13 Correct 43 ms 2052 KB Output is correct
14 Correct 0 ms 2052 KB Output is correct
15 Correct 0 ms 2052 KB Output is correct
16 Correct 0 ms 2052 KB Output is correct
17 Correct 0 ms 2052 KB Output is correct
18 Correct 0 ms 2052 KB Output is correct
19 Correct 0 ms 2052 KB Output is correct
20 Correct 0 ms 2052 KB Output is correct
21 Correct 6 ms 2052 KB Output is correct
22 Correct 6 ms 2052 KB Output is correct
23 Correct 3 ms 2052 KB Output is correct
24 Correct 0 ms 2052 KB Output is correct
25 Correct 6 ms 2052 KB Output is correct
26 Correct 49 ms 2052 KB Output is correct
27 Correct 0 ms 2052 KB Output is correct
28 Correct 0 ms 2052 KB Output is correct
29 Correct 0 ms 2052 KB Output is correct
30 Correct 0 ms 2052 KB Output is correct
31 Correct 6 ms 2052 KB Output is correct
32 Correct 0 ms 2052 KB Output is correct
33 Correct 43 ms 2052 KB Output is correct
34 Correct 46 ms 2052 KB Output is correct
35 Correct 0 ms 2052 KB Output is correct
36 Correct 43 ms 2052 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 2052 KB Output is correct
2 Correct 0 ms 2052 KB Output is correct
3 Correct 0 ms 2052 KB Output is correct
4 Correct 0 ms 2052 KB Output is correct
5 Correct 0 ms 2052 KB Output is correct
6 Correct 0 ms 2052 KB Output is correct
7 Correct 0 ms 2052 KB Output is correct
8 Correct 0 ms 2052 KB Output is correct
9 Correct 3 ms 2052 KB Output is correct
10 Correct 3 ms 2052 KB Output is correct
11 Correct 0 ms 2052 KB Output is correct
12 Correct 0 ms 2052 KB Output is correct
13 Correct 43 ms 2052 KB Output is correct
14 Correct 0 ms 2052 KB Output is correct
15 Correct 0 ms 2052 KB Output is correct
16 Correct 0 ms 2052 KB Output is correct
17 Correct 0 ms 2052 KB Output is correct
18 Correct 0 ms 2052 KB Output is correct
19 Correct 0 ms 2052 KB Output is correct
20 Correct 0 ms 2052 KB Output is correct
21 Correct 9 ms 2052 KB Output is correct
22 Correct 6 ms 2052 KB Output is correct
23 Correct 6 ms 2052 KB Output is correct
24 Correct 0 ms 2052 KB Output is correct
25 Correct 3 ms 2052 KB Output is correct
26 Correct 39 ms 2052 KB Output is correct
27 Correct 0 ms 2052 KB Output is correct
28 Correct 0 ms 2052 KB Output is correct
29 Correct 0 ms 2052 KB Output is correct
30 Correct 0 ms 2052 KB Output is correct
31 Correct 0 ms 2052 KB Output is correct
32 Correct 0 ms 2052 KB Output is correct
33 Correct 0 ms 2052 KB Output is correct
34 Correct 0 ms 2052 KB Output is correct
35 Correct 0 ms 2052 KB Output is correct
36 Correct 0 ms 2052 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 2052 KB Output is correct
2 Correct 0 ms 2052 KB Output is correct
3 Correct 0 ms 2052 KB Output is correct
4 Correct 0 ms 2052 KB Output is correct
5 Correct 0 ms 2052 KB Output is correct
6 Correct 0 ms 2052 KB Output is correct
7 Correct 0 ms 2052 KB Output is correct
8 Correct 0 ms 2052 KB Output is correct
9 Correct 3 ms 2052 KB Output is correct
10 Correct 0 ms 2052 KB Output is correct
11 Correct 0 ms 2052 KB Output is correct
12 Correct 0 ms 2052 KB Output is correct
13 Correct 43 ms 2052 KB Output is correct
14 Correct 0 ms 2052 KB Output is correct
15 Correct 0 ms 2052 KB Output is correct
16 Correct 0 ms 2052 KB Output is correct
17 Correct 0 ms 2052 KB Output is correct
18 Correct 0 ms 2052 KB Output is correct
19 Correct 0 ms 2052 KB Output is correct
20 Correct 0 ms 2052 KB Output is correct
21 Correct 0 ms 2052 KB Output is correct
22 Correct 0 ms 2052 KB Output is correct
23 Correct 0 ms 2052 KB Output is correct
24 Correct 0 ms 2052 KB Output is correct
25 Correct 0 ms 2052 KB Output is correct
26 Correct 0 ms 2052 KB Output is correct
27 Correct 0 ms 2052 KB Output is correct
28 Correct 0 ms 2052 KB Output is correct
29 Correct 0 ms 2052 KB Output is correct
30 Correct 16 ms 2052 KB Output is correct
31 Correct 0 ms 2052 KB Output is correct
32 Correct 0 ms 2052 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 2052 KB Output is correct
2 Correct 0 ms 2052 KB Output is correct
3 Correct 0 ms 2052 KB Output is correct
4 Correct 0 ms 2052 KB Output is correct
5 Correct 0 ms 2052 KB Output is correct
6 Correct 0 ms 2052 KB Output is correct
7 Correct 0 ms 2052 KB Output is correct
8 Correct 3 ms 2052 KB Output is correct
9 Correct 0 ms 2052 KB Output is correct
10 Correct 3 ms 2052 KB Output is correct
11 Correct 0 ms 2052 KB Output is correct
12 Correct 0 ms 2052 KB Output is correct
13 Correct 43 ms 2052 KB Output is correct
14 Correct 0 ms 2052 KB Output is correct
15 Correct 0 ms 2052 KB Output is correct
16 Correct 0 ms 2052 KB Output is correct
17 Correct 0 ms 2052 KB Output is correct
18 Correct 0 ms 2052 KB Output is correct
19 Correct 0 ms 2052 KB Output is correct
20 Correct 0 ms 2052 KB Output is correct
21 Correct 3 ms 2052 KB Output is correct
22 Correct 3 ms 2052 KB Output is correct
23 Correct 3 ms 2052 KB Output is correct
24 Correct 0 ms 2052 KB Output is correct
25 Correct 6 ms 2052 KB Output is correct
26 Correct 39 ms 2052 KB Output is correct
27 Correct 0 ms 2052 KB Output is correct
28 Correct 0 ms 2052 KB Output is correct
29 Correct 0 ms 2052 KB Output is correct
30 Correct 0 ms 2052 KB Output is correct
31 Correct 3 ms 2052 KB Output is correct
32 Correct 0 ms 2052 KB Output is correct
33 Correct 39 ms 2052 KB Output is correct
34 Correct 43 ms 2052 KB Output is correct
35 Correct 3 ms 2052 KB Output is correct
36 Correct 43 ms 2052 KB Output is correct
37 Correct 0 ms 2052 KB Output is correct
38 Correct 0 ms 2052 KB Output is correct
39 Correct 0 ms 2052 KB Output is correct
40 Correct 0 ms 2052 KB Output is correct
41 Correct 0 ms 2052 KB Output is correct
42 Correct 0 ms 2052 KB Output is correct
43 Correct 0 ms 2052 KB Output is correct
44 Correct 0 ms 2052 KB Output is correct
45 Correct 0 ms 2052 KB Output is correct
46 Correct 0 ms 2052 KB Output is correct
47 Correct 0 ms 2052 KB Output is correct
48 Correct 0 ms 2052 KB Output is correct
49 Correct 0 ms 2052 KB Output is correct
50 Correct 0 ms 2052 KB Output is correct
51 Correct 0 ms 2052 KB Output is correct
52 Correct 0 ms 2052 KB Output is correct
53 Correct 13 ms 2052 KB Output is correct
54 Correct 0 ms 2052 KB Output is correct
55 Correct 0 ms 2052 KB Output is correct
56 Correct 0 ms 2052 KB Output is correct
57 Correct 0 ms 2052 KB Output is correct
58 Correct 0 ms 2052 KB Output is correct
59 Correct 0 ms 2052 KB Output is correct
60 Correct 0 ms 2052 KB Output is correct
61 Correct 0 ms 2052 KB Output is correct
62 Correct 3 ms 2052 KB Output is correct
63 Correct 3 ms 2052 KB Output is correct
64 Correct 0 ms 2052 KB Output is correct
65 Correct 0 ms 2052 KB Output is correct
66 Correct 0 ms 2052 KB Output is correct
67 Correct 0 ms 2052 KB Output is correct
68 Correct 3 ms 2052 KB Output is correct
69 Correct 0 ms 2052 KB Output is correct
70 Correct 0 ms 2052 KB Output is correct
71 Correct 0 ms 2052 KB Output is correct
72 Correct 3 ms 2052 KB Output is correct
73 Correct 6 ms 2052 KB Output is correct
74 Correct 3 ms 2052 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 2052 KB Output is correct
2 Correct 0 ms 2052 KB Output is correct
3 Correct 0 ms 2052 KB Output is correct
4 Correct 0 ms 2052 KB Output is correct
5 Correct 0 ms 2052 KB Output is correct
6 Correct 0 ms 2052 KB Output is correct
7 Correct 0 ms 2052 KB Output is correct
8 Correct 0 ms 2052 KB Output is correct
9 Correct 0 ms 2052 KB Output is correct
10 Correct 0 ms 2052 KB Output is correct
11 Correct 0 ms 2052 KB Output is correct
12 Correct 3 ms 2052 KB Output is correct
13 Correct 43 ms 2052 KB Output is correct
14 Correct 0 ms 2052 KB Output is correct
15 Correct 0 ms 2052 KB Output is correct
16 Correct 0 ms 2052 KB Output is correct
17 Correct 0 ms 2052 KB Output is correct
18 Correct 6 ms 2052 KB Output is correct
19 Correct 3 ms 2052 KB Output is correct
20 Correct 39 ms 2052 KB Output is correct
21 Correct 43 ms 2052 KB Output is correct
22 Correct 0 ms 2052 KB Output is correct
23 Correct 39 ms 2052 KB Output is correct
24 Correct 0 ms 2052 KB Output is correct
25 Correct 0 ms 2052 KB Output is correct
26 Correct 0 ms 2052 KB Output is correct
27 Correct 0 ms 2052 KB Output is correct
28 Correct 0 ms 2052 KB Output is correct
29 Correct 0 ms 2052 KB Output is correct
30 Correct 0 ms 2052 KB Output is correct
31 Correct 0 ms 2052 KB Output is correct
32 Correct 0 ms 2052 KB Output is correct
33 Correct 0 ms 2052 KB Output is correct
34 Correct 0 ms 2052 KB Output is correct
35 Correct 0 ms 2052 KB Output is correct
36 Correct 0 ms 2052 KB Output is correct
37 Correct 0 ms 2052 KB Output is correct
38 Correct 0 ms 2052 KB Output is correct
39 Correct 0 ms 2052 KB Output is correct
40 Correct 19 ms 2052 KB Output is correct
41 Correct 0 ms 2052 KB Output is correct
42 Correct 0 ms 2052 KB Output is correct
43 Correct 0 ms 2052 KB Output is correct
44 Correct 0 ms 2052 KB Output is correct
45 Correct 3 ms 2052 KB Output is correct
46 Correct 0 ms 2052 KB Output is correct
47 Correct 0 ms 2052 KB Output is correct
48 Correct 0 ms 2052 KB Output is correct
49 Correct 3 ms 2052 KB Output is correct
50 Correct 3 ms 2052 KB Output is correct
51 Correct 0 ms 2052 KB Output is correct
52 Runtime error 0 ms 2052 KB Execution killed with signal 11 (could be triggered by violating memory limits)
53 Halted 0 ms 0 KB -