Pagini recente » Cod sursa (job #46947) | Cod sursa (job #2418332) | Cod sursa (job #578942) | Cod sursa (job #1628954) | Cod sursa (job #774113)
Cod sursa(job #774113)
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <map>
using namespace std;
#define maxn 880
int n;
int s[maxn], t[maxn];
char fol[maxn], isEnd[maxn];
pair<int, int> v[maxn];
pair<pair<int, int>, int> st[maxn];
int bs(pair<int, int> f)
{
int left=1, med, right=n;
while(left<=right)
{
med=(left+right)/2;
if(st[med].first==f)
return st[med].second;
if(st[med].first<f)
left=med+1;
else
right=med-1;
}
return 0;
}
int verif()
{
int lg, x;
for(int i=1; i<=n; ++i)
if(isEnd[i]==0)
{
lg=0;
x=i;
while(x)
{
++lg;
s[x]=lg%2+1;
fol[x]=1;
x=t[x];
}
if(lg%2)
return 0;
}
for(int i=1; i<=n; ++i)
if(fol[i]==0)
{
lg=0;
x=i;
while(fol[x]==0)
{
++lg;
fol[x]=1;
s[x]=lg%2+1;
x=t[x];
}
if(lg%2)
return 0;
}
return 1;
}
void solve()
{
int x1=v[1].first, y1=v[1].second;
int xs, ys, nc, wh;
pair<int, int> p;
for(int pas=0; pas<4; ++pas)
{
for(int i=1; i<=n; ++i)
{
if(pas==0 && i==1)
continue;
xs=v[i].first-x1;
ys=v[i].second-y1;
nc=0;
memset(t, 0, sizeof(t));
memset(fol, 0, sizeof(fol));
memset(isEnd, 0, sizeof(isEnd));
for(int j=1; j<=n; ++j)
{
p=make_pair(v[j].first-xs, v[j].second-ys);
t[j]=bs(p);
isEnd[t[j]]=1;
}
if(verif())
return;
}
for(int i=1; i<=n; ++i)
{
xs=v[i].second;
ys=-v[i].first;
v[i].first=xs;
v[i].second=ys;
}
}
}
int main()
{
freopen("overlap.in", "r", stdin);
freopen("overlap.out", "w", stdout);
scanf("%d", &n);
for(int i=1; i<=n; ++i)
{
scanf("%d%d", &v[i].first, &v[i].second);
st[i]=make_pair(v[i], i);
}
sort(st+1, st+n+1);
solve();
for(int i=1; i<=n; ++i)
printf("%d\n", s[i]);
return 0;
}