Submission #710639

#TimeUsernameProblemLanguageResultExecution timeMemory
710639WonderfulWhaleIce Hockey World Championship (CEOI15_bobek)C++17
100 / 100
442 ms33360 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() 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 << "2\n"; } else { cout << "1\n"; } return 0; } int m2 = n-m; vector<int> v1; 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]; } } v1.pb(s); } vector<int> v2; 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]; } } v2.pb(s); } sort(all(v1)); sort(all(v2)); vector<pii> pre(sz(v2)); for(int i=0;i<sz(v2);i++) { pre[i] = {v2[i], i+1}; } int ans = 0; for(int i=0;i<sz(v1);i++) { if(v1[i]>Sum) break; int s = -1; int e = sz(v2); while(e-s>1) { int m = (e+s)/2; if(pre[m].st<=Sum-v1[i]) s = m; else e = m; } ans += pre[s].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...