Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <map>
- #include <set>
- #include <queue>
- #include <algorithm>
- #include <string>
- #include <cmath>
- #include <cstdio>
- #include <iomanip>
- #include <fstream>
- #include <cassert>
- #include <cstring>
- #include <unordered_set>
- #include <unordered_map>
- #include <numeric>
- #include <ctime>
- #include <bitset>
- #include <complex>
- #include <random>
- using namespace std;
- #define int long long
- int get(int x) {
- return ((x % 2) + 2) % 2;
- }
- int n;
- vector<pair<int, int>> a;
- vector<int> d[2][2];
- void filld() {
- for (int i = 0; i < 2; i++) {
- for (int j = 0; j < 2; j++) {
- d[i][j].clear();
- }
- }
- for (int i = 0; i < n; i++) {
- d[get(a[i].first)][get(a[i].second)].push_back(i);
- }
- }
- int lol(int i, int j) {
- int df = a[i].first - a[j].first;
- int ds = a[i].second - a[j].second;
- return df * df + ds * ds;
- }
- void out(vector<int> v) {
- sort(v.begin(), v.end());
- v.resize(unique(v.begin(), v.end()) - v.begin());
- if ((int)v.size() == n) {
- return;
- }
- if (v.empty()) {
- return;
- }
- vector<int> gr(n, 0);
- for (auto t : v) {
- gr[t] = 1;
- }
- set<int> s1;
- set<int> s2;
- for (int i = 0; i < n; i++) {
- for (int j = i + 1; j < n; j++) {
- if (gr[i] == gr[j]) {
- s1.insert(lol(i, j));
- } else {
- s2.insert(lol(i, j));
- }
- }
- }
- int ok = 1;
- for (auto t : s2) {
- if (s1.count(t)) {
- ok = 0;
- }
- }
- for (auto t : s1) {
- if (s2.count(t)) {
- ok = 0;
- }
- }
- if (ok) {
- cout << v.size() << endl;
- for (auto t : v) {
- cout << t + 1 << ' ';
- }
- cout << endl;
- exit(0);
- }
- }
- void rec() {
- filld();
- {
- vector<int> v;
- for (auto t : d[0][0]) v.push_back(t);
- for (auto t : d[1][1]) v.push_back(t);
- out(v);
- }
- out(d[0][0]);
- out(d[0][1]);
- for (int i = 0; i < n; i++) {
- a[i].first -= abs(a[i].first % 2);
- a[i].second -= abs(a[i].second % 2);
- a[i].first /= 2;
- a[i].second /= 2;
- }
- rec();
- }
- signed main() {
- ios_base::sync_with_stdio(false);
- cin.tie(0);
- cin >> n;
- a.resize(n);
- for (auto &t : a) {
- cin >> t.first >> t.second;
- }
- vector<pair<int, int>> ta = a;
- sort(ta.begin(), ta.end());
- ta.resize(unique(ta.begin(), ta.end()) - ta.begin());
- assert((int)ta.size() == n);
- rec();
- assert(false);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement