Submission #1218630

#TimeUsernameProblemLanguageResultExecution timeMemory
1218630giorgi123glmIce Hockey World Championship (CEOI15_bobek)C++20
60 / 100
1098 ms65896 KiB
#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 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...