Nu aveti permisiuni pentru a descarca fisierul grader_test9.in
Cod sursa(job #206844)
Utilizator | Data | 10 septembrie 2008 00:48:33 | |
---|---|---|---|
Problema | Overlap | Scor | 0 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 2.38 kb |
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
struct punct{int x; int y;};
struct marmota{int x; int y; int poz;};
punct vt[810],nou,nn,aux;
marmota v[810];
int n,i,j,k,shx,shy,kk,viz[810],rez[810],ok,sol[810],unu,doi,poz;
bool mai_mic(marmota a, marmota b)
{
if ((a.x<b.x)||((a.x==b.x)&&(a.y<b.y)))
return true;
return false;
}
bool cmp(marmota a, marmota b)
{
if (mai_mic(a,b))
return true;
return false;
}
int caut_bin(punct x, long l, long r)
{
long m=(l+r)/2;
if ((x.x==v[m].x)&&(x.y==v[m].y))
return m;
if (l>=r)
return 0;
if ((x.x<v[m].x)||((x.x==v[m].x)&&(x.y<v[m].y)))
return caut_bin(x,l,m-1);
else
return caut_bin(x,m+1,r);
}
int main(){
freopen("overlap.in","r",stdin);
freopen("overlap.out","w",stdout);
scanf("%d",&n);
for (i=1;i<=n;i++)
{
scanf("%d%d",&v[i].x,&v[i].y);
v[i].poz=i;
}
sort(v+1,v+n+1,cmp);
for (i=2;i<=n;i++)
{
nou.x=v[1].x;
nou.y=v[1].y;
for (k=0;k<=3;k++)
{
// printf("%d %d\n",nou.x,nou.y);
shx=v[i].x-nou.x;
shy=v[i].y-nou.y;
// printf("%d %d\n",shx,shy);
// printf("\n");
memset(vt,0,sizeof(vt));
for (j=1;j<=n;j++)
{
nn.x=v[j].x;
nn.y=v[j].y;
aux=nn;
for (kk=1;kk<=k;kk++)
{
nn.x=aux.y;
nn.y=-aux.x;
aux=nn;
}
vt[j].x=nn.x+shx;
vt[j].y=nn.y+shy;
}
memset(viz,0,sizeof(viz));
memset(rez,0,sizeof(rez));
// for (j=1;j<=n;j++)
// printf("%d %d\n",vt[j].x,vt[j].y);
// printf("\n");
ok=1;
for (j=1;j<=n;j++)
{
poz=caut_bin(vt[j],1,n);
// printf("%d\n",poz);
if (poz!=0&&viz[poz]==0)
{
rez[v[j].poz]=v[poz].poz;
viz[poz]=1;
}
}
memset(sol,0,sizeof(sol));
unu=0;
for (j=1;j<=n;j++)
if (rez[j])
{
sol[j]=1;
sol[rez[j]]=2;
unu++;
if (unu==(n/2))
break;
}
unu=doi=0;
for (j=1;j<=n;j++)
{
if (sol[j]==1)
unu++;
if (sol[j]==2)
doi++;
}
if ((unu==doi)&&(unu==(n/2)))
//am solutie
{
for (i=1;i<=n;i++)
printf("%d\n",sol[i]);
return 0;
}
aux=nou;
nou.x=aux.y;
nou.y=-aux.x;
}
}
return 0;
}