Submission #996243

#TimeUsernameProblemLanguageResultExecution timeMemory
996243vjudge1Ice Hockey World Championship (CEOI15_bobek)C++17
100 / 100
191 ms22732 KiB
#include <bits/stdc++.h>
using namespace std;

#define ll long long
#define ld long double
#define ull unsigned long long
#define pii pair<int,int>
#define pll pair<long long, long long>
#define fi first
#define se second
#define all(a) (a).begin(), (a).end()
#define pb push_back
#define lwb lower_bound
#define upb upper_bound

#define TASKNAME "NAME"

void init()
{
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    ///freopen(TASKNAME".INP","r",stdin); freopen(TASKNAME".OUT","w",stdout);
}

const int SZ = 1e6+5;
const ll INF = INT_MAX / 2, MOD = 1e9+7, INFLL = 2e18;
const double epsilon = 1e-3;

int n;
ll m, a[SZ];
vector<ll> s1, s2;

void recur1(int pos, ll sum)
{
    if(pos == n/2+1)
    {
        s1.pb(sum);
        return;
    }
    recur1(pos+1, sum);
    recur1(pos+1, sum + a[pos]);
}

void recur2(int pos, ll sum)
{
    if(pos == n+1)
    {
        s2.pb(sum);
        return;
    }
    recur2(pos+1, sum);
    recur2(pos+1, sum + a[pos]);
}

ll res = 0;

int main()
{
    init();
    cin >> n >> m;
    for(int i = 1; i <= n; i++)
    {
        cin >> a[i];
    }
    recur1(1, 0);
    recur2(n/2 + 1, 0);
    sort(all(s1));
    sort(all(s2));
    for(ll x : s1)
    {
        ll y = m - x;
        int pos = upper_bound(all(s2), y) - s2.begin();
        res += max(0LL, 1LL*pos);
    }
    cout << res;
}

#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...