제출 #1229560

#제출 시각아이디문제언어결과실행 시간메모리
1229560kaiboyIce Hockey World Championship (CEOI15_bobek)C++20
100 / 100
273 ms16828 KiB
#include <algorithm>
#include <iostream>

using namespace std;

const int N = 40;
const int M = 20;

long long aa[N], ss[1 << M], tt[1 << M];

int main() {
	int n; long long s_; cin >> n >> s_;
	for (int i = 0; i < n; i++)
		cin >> aa[i];
	int m = n / 2;
	for (int b = 0; b < 1 << m; b++)
		for (int i = 0; i < m; i++)
			if (b >> i & 1 && (ss[b] += aa[i]) > s_)
				break;
	for (int b = 0; b < 1 << n - m; b++)
		for (int i = m; i < n; i++)
			if (b >> i - m & 1 && (tt[b] += aa[i]) > s_)
				break;
	sort(ss, ss + (1 << m));
	sort(tt, tt + (1 << n - m));
	long long ans = 0;
	for (int l = 0, r = (1 << n - m) - 1; l < 1 << m; l++) {
		while (r >= 0 && ss[l] + tt[r] > s_)
			r--;
		ans += r + 1;
	}
	cout << ans << '\n';
	return 0;
}
#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...
#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...