Submission #710627

#TimeUsernameProblemLanguageResultExecution timeMemory
710627WonderfulWhaleIce Hockey World Championship (CEOI15_bobek)C++17
50 / 100
1085 ms120224 KiB
#include<bits/stdc++.h> using namespace std; #define int int64_t #define pb push_back #define pii pair<int, int> #define st first #define nd second #define all(x) (x).begin(), (x).end() #define sz(x) (int)(x).size() map<int, int> M; map<int, int> M2; set<pii> S; int tab[49]; int32_t main() { ios_base::sync_with_stdio(false); cin.tie(NULL); int n, Sum; cin >> n >> Sum; for(int i=0;i<n;i++) { cin >> tab[i]; } int m = n/2; if(n==1) { if(tab[0]<=Sum) { cout << "1\n"; } else { cout << "0\n"; } return 0; } int m2 = n-m; for(int i=0;i<(1<<m);i++) { int s = 0; for(int j=0;j<m;j++) { if(i&(1<<j)) { s+=tab[j]; } } M[s]++; } for(int i=0;i<(1<<m2);i++) { int s = 0; for(int j=m;j<n;j++) { if(i&(1<<(j-m))) { s+=tab[j]; } } M2[s]++; } int s = 0; for(pii x:M2) { s += x.nd; S.insert({x.st, s}); } int ans = 0; for(pii x:M) { if(x.st>Sum) continue; int val = Sum-x.st; auto it = S.upper_bound({val, 1e18}); if(it==S.begin()) continue; it--; ans += x.nd*(*it).nd; } 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...