Submission #462447

#TimeUsernameProblemLanguageResultExecution timeMemory
462447JovanBIce Hockey World Championship (CEOI15_bobek)C++17
100 / 100
348 ms16836 KiB
#include <bits/stdc++.h>
using namespace std;
 
typedef long long ll;
typedef long double ld;
 
ll niz[45];
ll niz1[5000005];
ll niz2[5000005];
 
int main(){
    ios_base::sync_with_stdio(false);
    cout.precision(10);
    cout<<fixed;
 
    int n;
    ll m;
    cin >> n >> m;
    for(int i=1; i<=n; i++){
        cin >> niz[i];
    }
    int k = n/2;
    for(int i=0; i<(1<<k); i++){
        for(int j=1; j<=k; j++){
            if(i & (1 << (j-1))) niz1[i+1] += niz[j];
        }
    }
    int p = n - k;
    for(int i=0; i<(1<<p); i++){
        for(int j=k+1; j<=n; j++){
            if(i & (1 << (j-k-1))) niz2[i+1] += niz[j];
        }
    }
    k = (1 << k);
    p = (1 << p);
    int tren = 0;
    ll cnt = 0;
    sort(niz1+1, niz1+1+k);
    sort(niz2+1, niz2+1+p);
    for(int i=k; i>=1; i--){
        while(niz1[i] + niz2[tren+1] <= m && tren < p) tren++;
        cnt += tren;
    }
    cout << cnt;
    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...