Iamtui1010

canthangbang.cpp

Jan 7th, 2022
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.24 KB | None | 0 0
  1. #include<iostream>
  2. #include<cstdlib>
  3. #include<vector>
  4. #include<unordered_map>
  5. #include<algorithm>
  6.  
  7. #define long long long
  8. #define nln '\n'
  9.  
  10. using namespace std;
  11.  
  12. void build_sum(
  13.     const vector<long> &a,
  14.     long bgn, long end,
  15.     long sum,
  16.     vector<long> &vsm,
  17.     unordered_map<long, long> &cnt)
  18. {
  19.     if (bgn == end)
  20.     {
  21.         if (!cnt[sum])
  22.             cnt[sum] = 1, vsm.push_back(sum);
  23.         else
  24.             ++cnt[sum];
  25.         return;
  26.     }
  27.     build_sum(a, bgn+1, end, sum+a[bgn], vsm, cnt);
  28.     build_sum(a, bgn+1, end, sum-a[bgn], vsm, cnt);
  29.     build_sum(a, bgn+1, end, sum, vsm, cnt);
  30. }
  31.  
  32. int main()
  33. {
  34.     // Input
  35.     cin.tie(0)->sync_with_stdio(0);
  36.     cout.tie(0)->sync_with_stdio(0);
  37.     //freopen("canthangbang.inp", "r", stdin);
  38.     long n, m;
  39.     cin >> n >> m;
  40.     vector<long> a(n);
  41.     for (auto &i : a)
  42.         cin >> i;
  43.     // Process
  44.     vector<long> sm1, sm2;
  45.     unordered_map<long, long> co1, co2;
  46.     build_sum(a, 0, n/2, 0, sm1, co1);
  47.     build_sum(a, n/2, n, 0, sm2, co2);
  48.     sort(sm2.begin(), sm2.end());
  49.     long ans = 0;
  50.     for (auto i : sm1)
  51.         if (binary_search(sm2.begin(), sm2.end(), m-i))
  52.             ans += co1[i]*co2[m-i];
  53.     cout << ans << nln;
  54.     return 0;
  55. }
Advertisement
Add Comment
Please, Sign In to add comment