Pagini recente » Cod sursa (job #992739) | Cod sursa (job #2688015) | Cod sursa (job #2329421) | Cod sursa (job #2405324) | Cod sursa (job #2522684)
#include <bits/stdc++.h>
using namespace std;
const int DIM = 805;
map<pair<int, int>, int> mmp;
int nxt[DIM], prv[DIM], ans[DIM], mrk[DIM];
pair<int, int> pts[DIM], aux[DIM];
int main(void) {
freopen("overlap.in", "r", stdin);
freopen("overlap.out", "w", stdout);
int n; cin >> n;
for (int i = 1; i <= n; ++i) {
cin >> pts[i].first >> pts[i].second;
mmp[pts[i]] = i; aux[i] = pts[i];
}
for (int t = 1; t <= 4; ++t) {
for (int i = 1; i <= n; ++i) {
swap(aux[i].first, aux[i].second);
aux[i].first *= -1;
}
for (int i = 2; i <= n; ++i) {
int dx = pts[i].first - aux[1].first,
dy = pts[i].second - aux[1].second;
for (int j = 1; j <= n; ++j)
nxt[j] = prv[j] = mrk[j] = 0;
for (int j = 1; j <= n; ++j) {
pair<int, int> pt = make_pair(aux[j].first + dx, aux[j].second + dy);
auto it = mmp.find(pt);
if (it != mmp.end()) {
nxt[j] = it -> second;
prv[it -> second] = j;
}
}
bool ok = true;
for (int j = 1; j <= n; ++j) if (!mrk[j]) {
int x = j;
while (prv[x] and prv[x] != j)
x = prv[x];
int sd = 1, nr = 0;
while (x and !mrk[x]) {
ans[x] = sd; sd = 3 - sd; ++nr;
mrk[x] = true; x = nxt[x];
}
if (nr % 2) {
ok = false;
break;
}
}
if (ok) {
for (int j = 1; j <= n; ++j)
cout << ans[j] << "\n";
return 0;
}
}
}
return 0;
}