#include <algorithm>
#include <functional>
#include <iostream>
#include <fstream>
#include <list>
#include <map>
using namespace std;
#define int long long
signed main () {
ios::sync_with_stdio (false);
cin.tie (0);
cout.tie (0);
int N = 0, M = 0;
cin >> N >> M;
vector <int> v (N + 1);
for (int i = 1; i <= N; i++)
cin >> v[i];
map <int, int> m;
for (int bit = 0; bit < (1 << (N / 2)); bit++) {
int sum = 0;
for (int i = 0; i < 20; i++)
if (bit & (1 << i))
sum += v[i + 1];
m[sum]++;
}
for (auto it = ++m.begin(); it != m.end(); it++) {
auto it1 = it;
it->second += (--it1)->second;
}
int ans = 0;
for (int bit = 0; bit < (1 << (N - N / 2)); bit++) {
int sum = 0;
for (int i = 0; i < 20; i++)
if (bit & (1 << i))
sum += v[i + N / 2 + 1];
auto it = m.lower_bound ((M - sum) + 1);
if (it == m.begin())
continue;
ans += (*--it).second;
}
cout << ans << '\n';
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |