Pagini recente »
Rating Alexandru Ioan-Cristian (cristialexandru)
|
Rating Amarandei Stanescu Alexandru (AlexandruAmrad)
|
Clasament test_2000
|
Istoria paginii runda/lasm_22_11_cl11_12/clasament
|
Cod sursă (job #93688)
Cod sursă (job
#93688)
#include <cstdio>
#include <cstring>
#define crt (x-1)*n+y
#define nou (x+dx[j]-1)*n+y+dy[j]
#define Nmax 510
using namespace std;
int n,i,j,x,y;
int t[Nmax*Nmax], rang[Nmax*Nmax];
short a[Nmax][Nmax];
bool ap[Nmax*Nmax];
const int dx[7]={0,1,1,-1,-1,0,0};
const int dy[7]={0,-1,0,0,1,-1,1};
int multime(int nod)
{
if (t[nod]!=nod) t[nod]=multime(t[nod]);
return t[nod];
}
void reuneste(int x,int y)
{
x=multime(x);
y=multime(y);
if (x==y) return;
if (rang[x]<rang[y]) t[x]=y;
else t[y]=x;
if (rang[x]==rang[y]) rang[x]++;
}
int main()
{
freopen("hex.in","r",stdin);
freopen("hex.out","w",stdout);
scanf("%d", &n);
for (i=1;i<=n*n;++i) t[i]=i;
for (i=1;i<=n*n;++i)
{
scanf("%d %d", &x, &y);
a[x][y]=(i%2)+1;
for (j=1;j<=6;++j)
if (a[x+dx[j]][y+dy[j]]==(i%2)+1)
reuneste(crt,nou);
memset(ap,false,sizeof(ap));
if (i%2)
{
y=1;
for (x=1;x<=n;++x)
ap[multime(crt)]=true;
y=n;
for (x=1;x<=n;++x)
if (ap[multime(crt)])
{
printf("%d\n", i);
return 0;
}
}
else
{
x=1;
for (y=1;y<=n;++y)
ap[multime(crt)]=true;
x=n;
for (y=1;y<=n;++y)
if (ap[multime(crt)])
{
printf("%d\n", i);
return 0;
}
}
}
return 0;
}