Submission #66050

#TimeUsernameProblemLanguageResultExecution timeMemory
66050bazsi700Ice Hockey World Championship (CEOI15_bobek)C++14
40 / 100
1090 ms67800 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long //14:20 int n; ll m; ll c[45]; ll way[2150000]; int main() { ios::sync_with_stdio(false); cin.tie(0); cin >> n >> m; for(int i = 0; i < n; i++) { cin >> c[i]; } if(n <= 22) { ll ways = 0; for(int mask = 0; mask < (1<<n); mask++) { ll money = m; for(int i = 0; i < n; i++) { if(mask&(1<<i)) { money-= c[i]; } } if(money >= 0) { ways++; } } cout << ways; } else { ll ways = 0; vector<ll> did; unordered_map<ll,int> compr; int b1 = 21; for(int mask = 0; mask < (1<<b1); mask++) { ll money = m; for(int i = 0; i < b1; i++) { if(mask&(1<<i)) { money-= c[i]; } } if(money >= 0) { did.push_back(m-money); } } sort(did.begin(),did.end()); int in = 1; for(ll el : did) { compr[el] = in++; } for(int mask = 0; mask < (1<<b1); mask++) { ll money = m; for(int i = 0; i < b1; i++) { if(mask&(1<<i)) { money-= c[i]; } } if(money >= 0) { way[compr[(m-money)]]++; } } for(int i = 1; i <= in; i++) { way[i]+=way[i-1]; } for(int mask = 0; mask < (1<<(n-b1)); mask++) { ll money = m; for(int i = b1; i < n; i++) { if(mask&(1<<(i-b1))) { money-= c[i]; } } if(money >= 0) { auto it = upper_bound(did.begin(),did.end(),money); if(it != did.begin()) { it--; ways+= way[compr[*it]]; } } } cout << ways; } 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...