Pagini recente » Cod sursa (job #2475739) | Cod sursa (job #929932) | Cod sursa (job #15933) | Cod sursa (job #1375019) | Cod sursa (job #830516)
Cod sursa(job #830516)
#include<stdio.h>
#include<algorithm>
using namespace std;
FILE*f=fopen("overlap.in","r");
FILE*g=fopen("overlap.out","w");
int n,x,y,xj,yj,a[802],nr,viz[802],sol[802];
struct punct
{
int x,y,i;
}v[802],w[802];
int cmp(punct a,punct b)
{
if(a.x==b.x)
return a.y<b.y;
return a.x<b.x;
}
int main()
{
fscanf(f,"%d",&n);
for(int i=1;i<=n;++i)
{
fscanf(f,"%d%d",&v[i].x,&v[i].y);
v[i].i=w[i].i=i;
}
sort(v+1,v+n+1,cmp);
for(int i=1;i<=n;++i)
w[i]=v[i];
int okk=1;
for(int o=1;o<=4&&okk;++o)
{
for(int i=1;i<=n;++i)
{
int aux=w[i].x;
w[i].x=w[i].y;
w[i].y=-aux;
}
for(int i=2;i<=n;++i)
{
for(int j=1;j<=n;++j)
{
viz[j]=0;
a[j]=0;
}
x=w[1].x-v[i].x;
y=w[1].y-v[i].y;
a[v[1].i]=v[i].i;
for(int j=2;j<=n;++j)
{
xj=w[j].x-x;
yj=w[j].y-y;
int p=1;
int u=n;
while(p<=u)
{
int m=(p+u)/2;
if(xj>v[m].x)
p=m+1;
else if(xj<v[m].x)
u=m-1;
else
if(yj>v[m].y)
p=m+1;
else if(yj<v[m].y)
u=m-1;
else
{
a[v[j].i]=v[m].i;
break;
}
}
}
int ok=0;
for(int j=1;j<=n;++j)
if(a[j])
{
nr=1;
viz[j]=1;
int jj=j;
while(a[jj]&&!viz[a[jj]])
{
jj=a[jj];
++nr;
viz[jj]=1;
}
if(nr%2)
{
ok=1;
break;
}
}
if(!ok)
for(int j=1;j<=n;++j)
if(!viz[j])
{
ok=1;
break;
}
if(!ok)
{
for(int j=1;j<=n;++j)
if(a[j])
{
sol[j]=1;;
nr=1;
int jj=j;
while(a[jj])
{
jj=a[jj];
++nr;
if(nr%2)
sol[jj]=1;
else
sol[jj]=2;;
}
}
okk=0;
break;
}
}
}
for(int i=1;i<=n;++i)
fprintf(g,"%d\n",sol[i]);
fclose(f);
fclose(g);
return 0;
}