Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<cstdlib>
- #include<vector>
- #include<unordered_map>
- #include<algorithm>
- #define long long long
- #define nln '\n'
- const long N = 30, BASE = 1e4;
- using namespace std;
- pair<long, long> operator + (pair<long, long> a, pair<long, long> b)
- {
- return {a.first+b.first, a.second+b.second};
- }
- pair<long, long> operator - (pair<long, long> a, pair<long, long> b)
- {
- return {a.first-b.first, a.second-b.second};
- }
- void sums(
- const vector<pair<long, long>> &a,
- const pair<long, long> &mdl,
- long bgn, long end,
- const pair<long, long> &psm,
- vector<pair<long, long>> &vsm,
- unordered_map<long, long> &cnt
- )
- {
- if (bgn == end)
- {
- if (!cnt[psm.first*BASE+psm.second])
- vsm.push_back(psm), cnt[psm.first*BASE+psm.second] = 1;
- else
- ++cnt[psm.first*BASE+psm.second];
- return;
- }
- sums(a, mdl, bgn+1, end, psm+a[bgn], vsm, cnt);
- sums(a, mdl, bgn+1, end, psm, vsm, cnt);
- }
- int main()
- {
- cin.tie(0)->sync_with_stdio(0);
- cout.tie(0)->sync_with_stdio(0);
- // Input
- //freopen("vector.inp", "r", stdin);
- long n;
- cin >> n;
- vector<pair<long, long>> a(n);
- for (auto &i : a)
- cin >> i.first >> i.second;
- long u, v;
- cin >> u >> v;
- // Process
- vector<pair<long, long>> sm1, sm2;
- unordered_map<long, long> co1, co2;
- sums(a, {u, v}, 0, n/2, {0, 0}, sm1, co1);
- sums(a, {u, v}, n/2, n, {0, 0}, sm2, co2);
- sort(sm2.begin(), sm2.end());
- long ans = 0;
- for (const auto &i : sm1)
- {
- pair<long, long> tem = make_pair(u, v)-i;
- if (binary_search(sm2.begin(), sm2. end(), tem))
- ans += co1[i.first*BASE+i.second]*co2[tem.first*BASE+tem.second];
- }
- cout << ans << nln;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment