Submission #1157031

#TimeUsernameProblemLanguageResultExecution timeMemory
1157031dostsIce Hockey World Championship (CEOI15_bobek)C++20
100 / 100
632 ms52764 KiB
#include <bits/stdc++.h> #pragma GCC optimize("O3,unroll-loops") #pragma GCC target("avx2") using namespace std; #define int long long #define pii pair<int,int> #define ff first #define ss second #define sp << " " << #define all(cont) cont.begin(),cont.end() #define vi vector<int> const int inf = 1e17,N = 5e5+1,MOD = 998244353; void solve() { //how many subset sums < x //N <= 40 int n,x; cin >> n >> x; vi a(n+1); for (int i=1;i<=n;i++) cin >> a[i]; int lim1 = (1<<(n/2)); int lim2 = (1<<(n-n/2)); unordered_map<int,int> mp; vi st; for (int i = 0;i<lim1;i++) { int sm = 0; for (int j = 0;j<n/2;j++) { if (i&(1<<j)) sm+=a[j+1]; } if (!mp[sm]) st.push_back(sm); mp[sm]++; } sort(all(st)); int sm = 0; for (auto it : st) { sm+=mp[it]; mp[it]=sm; } int ans = 0; for (int i = 0;i<lim2;i++) { int sm = 0; for (int j = 0;j<(n-n/2);j++) { if (i&(1<<j)) sm+=a[n/2+j+1]; } auto it = upper_bound(all(st),x-sm); if (it == st.begin()) continue; int lkey = *(prev(it)); ans+=mp[lkey]; } cout << ans << '\n'; } int32_t main() { ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); #ifdef Dodi freopen("in.txt","r",stdin); freopen("out.txt","w",stdout); #endif int t = 1; //cin >> t; while (t --> 0) solve(); }
#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...