Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Слава Україні, Героям слава
- #pragma GCC optimize("O3")
- #include <bits/stdc++.h>
- using namespace std;
- int main() {
- ios_base::sync_with_stdio(false);
- cin.tie(nullptr);
- int n;
- cin >> n;
- vector<pair<int, int>> v(n);
- for(auto &[a, b] : v) cin >> a >> b;
- if(n >= 30) {
- n = 30;
- v.resize(30);
- }
- map<pair<int, int>, pair<int, int>> mp;
- pair<int, int> cur;
- auto p3 = [&](int x) -> int {
- int ans = 1;
- for(int j = 0; j < x; j++) ans *= 3;
- return ans;
- };
- int fp3 = p3(n / 2);
- for(int msk = 0; msk < fp3; msk++) {
- int tmp = msk, mskl = 0, mskr = 0;
- pair<int, int> cur;
- for(int i = 0; i < n / 2; i++) {
- if(tmp % 3 == 1) {
- cur.first += v[i].first;
- cur.second += v[i].second;
- mskl ^= (1 << i);
- } else if(tmp % 3 == 2) {
- cur.first -= v[i].first;
- cur.second -= v[i].second;
- mskr ^= (1 << i);
- }
- tmp /= 3;
- }
- mp[cur] = {mskl, mskr};
- }
- fp3 = p3((n + 1) / 2);
- int ansl = 0, ansr = 0;
- bool foi = false;
- for(int msk = 0; msk < fp3; msk++) {
- int tmp = msk, mskl = 0, mskr = 0;
- pair<int, int> cur;
- for(int i = n / 2; i < n; i++) {
- if(tmp % 3 == 1) {
- cur.first -= v[i].first;
- cur.second -= v[i].second;
- mskl ^= (1 << i);
- } else if(tmp % 3 == 2) {
- cur.first += v[i].first;
- cur.second += v[i].second;
- mskr ^= (1 << i);
- }
- tmp /= 3;
- }
- if(mp.find(cur) != mp.end()) {
- ansl = mskl ^ mp[cur].first;
- ansr = mskr ^ mp[cur].second;
- if (!ansl or !ansr) continue;
- foi = true;
- break;
- }
- }
- if(!foi) {
- cout << "yes\n";
- return 0;
- }
- cout << "no\n";
- cout << __builtin_popcount(ansl) << " ";
- for(int i = 0; i < 30; i++) if((ansl >> i) & 1) cout << (i + 1) << " ";
- cout << "\n";
- cout << __builtin_popcount(ansr) << " ";
- for (int i = 0; i < 30; i++) if ((ansr >> i) & 1) cout << (i + 1) << " ";
- cout << "\n";
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment