Submission #1121743

#TimeUsernameProblemLanguageResultExecution timeMemory
1121743vjudge1Ice Hockey World Championship (CEOI15_bobek)C++17
100 / 100
447 ms22952 KiB
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
using ll = long long;
// sinagdir hell sayilmir kocurmedir
void computeSubsetSums(const vector<ll>& arr, vector<ll>& subsetSums) {
    int n = arr.size();
    for (int mask = 0; mask < (1 << n); ++mask) {
        ll sum = 0;
        for (int i = 0; i < n; ++i) {
            if (mask & (1 << i)) {
                sum += arr[i];
            }
        }
        subsetSums.push_back(sum);
    }
}

int main() {
    int N;
    ll M;
    cin >> N >> M;

    vector<ll> costs(N);
    for (int i = 0; i < N; ++i) {
        cin >> costs[i];
    }
    vector<ll> firstHalf(costs.begin(), costs.begin() + N / 2);
    vector<ll> secondHalf(costs.begin() + N / 2, costs.end());


    vector<ll> subsetSums1, subsetSums2;
    computeSubsetSums(firstHalf, subsetSums1);
    computeSubsetSums(secondHalf, subsetSums2);


    sort(subsetSums2.begin(), subsetSums2.end());


    ll totalWays = 0;
    for (ll sum1 : subsetSums1) {
        ll remaining = M - sum1;
        totalWays += upper_bound(subsetSums2.begin(), subsetSums2.end(), remaining) - subsetSums2.begin();
    }

    cout << totalWays << endl;
    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...