Pagini recente » Cod sursa (job #1037028) | Cod sursa (job #1215390) | Cod sursa (job #982767) | Istoria paginii utilizator/porno_69 | Cod sursa (job #2216381)
#include <bits/stdc++.h>
using namespace std;
const int MAX_N = 800;
pair<int, int> v[MAX_N + 5], c[MAX_N + 5];
map<pair<int, int>, int>mp;
int prv[MAX_N + 5], nxt[MAX_N + 5];
int ans[MAX_N + 5];
int main() {
freopen("overlap.in", "r", stdin);
freopen("overlap.out", "w", stdout);
int n;
scanf("%d", &n);
for (int i = 1; i <= n; ++i) {
int x, y;
scanf("%d%d", &x, &y);
v[i] = c[i] = {x, y};
mp[v[i]] = i;
}
for (int rot = 0; rot < 4; ++rot) {
for (int i = 1; i <= n; ++i) {
swap(v[i].first, v[i].second);
v[i].second *= -1;
}
for (int i = 2; i <= n; ++i) {
memset(nxt, 0, sizeof(nxt));
memset(prv, 0, sizeof(prv));
memset(ans, 0, sizeof(ans));
int dx = c[i].first - v[1].first;
int dy = c[i].second - v[1].second;
for (int j = 1; j <= n; ++j) {
if (i != j && mp.count({v[j].first + dx, v[j].second + dy}) != 0) {
int aux = mp[{v[j].first + dx, v[j].second + dy}];
nxt[j] = aux;
prv[aux] = j;
}
}
bool ok = 1;
for (int j = 1; j <= n; ++j) {
int aux = j;
while (prv[aux] != 0 && prv[aux] != j)
aux = prv[aux];
int l = 0;
while (ans[aux] == 0 && aux != 0) {
ans[aux] = l % 2 + 1;
l++;
aux = nxt[aux];
}
if (l % 2 == 1) {
ok = 0;
break;
}
}
if (ok == 1) {
for (int j = 1; j <= n; ++j)
printf("%d\n", ans[j]);
return 0;
}
}
}
return 0;
}