#include <bits/stdc++.h>
using namespace std;
using ll = long long;
int n;
ll m;
vector<ll> v;
vector<ll> op1,op2;
void f1(int p,ll z)
{
if (p == n/2){
op1.push_back(z);
return;
}
f1(p+1,z);
f1(p+1,z+v[p]);
}
void f2(int p,ll z)
{
if (p == n){
op2.push_back(z);
return;
}
f2(p+1,z);
f2(p+1,z+v[p]);
}
int main()
{
cin>>n>>m;v.resize(n);
for (int i=0;i<n;i++) cin>>v[i];
if (n == 1){
if (m >= v[0]) cout<<2;
else cout<<1;
return 0;
}
f1(0,0);
f2(n/2,0);
sort(op2.begin(),op2.end());
ll odg = 0;
for (auto x: op1)
{
ll p = upper_bound(op2.begin(),op2.end(),m-x) - op2.begin();
odg += p;
//cout<<"za "<<x<<" dodava "<<p<<endl;
}
cout<<odg<<endl;
return 0;
}
# | 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... |