Iamtui1010

vector.cpp

Jan 6th, 2022
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.65 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. const long N = 30, BASE = 1e4;
  11.  
  12. using namespace std;
  13.  
  14. pair<long, long> operator + (pair<long, long> a, pair<long, long> b)
  15. {
  16.     return {a.first+b.first, a.second+b.second};
  17. }
  18.  
  19. pair<long, long> operator - (pair<long, long> a, pair<long, long> b)
  20. {
  21.     return {a.first-b.first, a.second-b.second};
  22. }
  23.  
  24. void sums(
  25.     const vector<pair<long, long>> &a,
  26.     const pair<long, long> &mdl,
  27.     long bgn, long end,
  28.     const pair<long, long> &psm,
  29.     vector<pair<long, long>> &vsm,
  30.     unordered_map<long, long> &cnt
  31.     )
  32. {
  33.     if (bgn == end)
  34.     {
  35.         if (!cnt[psm.first*BASE+psm.second])
  36.             vsm.push_back(psm), cnt[psm.first*BASE+psm.second] = 1;
  37.         else
  38.             ++cnt[psm.first*BASE+psm.second];
  39.         return;
  40.     }
  41.     sums(a, mdl, bgn+1, end, psm+a[bgn], vsm, cnt);
  42.     sums(a, mdl, bgn+1, end, psm, vsm, cnt);
  43. }
  44.  
  45. int main()
  46. {
  47.     cin.tie(0)->sync_with_stdio(0);
  48.     cout.tie(0)->sync_with_stdio(0);
  49.     // Input
  50.     //freopen("vector.inp", "r", stdin);
  51.     long n;
  52.     cin >> n;
  53.     vector<pair<long, long>> a(n);
  54.     for (auto &i : a)
  55.         cin >> i.first >> i.second;
  56.     long u, v;
  57.     cin >> u >> v;
  58.     // Process
  59.     vector<pair<long, long>> sm1, sm2;
  60.     unordered_map<long, long> co1, co2;
  61.  
  62.     sums(a, {u, v}, 0, n/2, {0, 0}, sm1, co1);
  63.     sums(a, {u, v}, n/2, n, {0, 0}, sm2, co2);
  64.  
  65.     sort(sm2.begin(), sm2.end());
  66.  
  67.     long ans = 0;
  68.     for (const auto &i : sm1)
  69.     {
  70.         pair<long, long> tem = make_pair(u, v)-i;
  71.         if (binary_search(sm2.begin(), sm2. end(), tem))
  72.             ans += co1[i.first*BASE+i.second]*co2[tem.first*BASE+tem.second];
  73.     }
  74.                
  75.     cout << ans << nln;
  76.     return 0;
  77. }
Advertisement
Add Comment
Please, Sign In to add comment