Pagini recente »
Atașamentele paginii Clasament flotari
|
Istoria paginii runda/sim_info13
|
Istoria paginii utilizator/garboteialex
|
inzapezire
|
Cod sursă (job #169680)
Cod sursă (job
#169680)
#include <cstdio>
#define MAXN 500
int mat[MAXN+2][MAXN+2],vf[MAXN+2][MAXN+2];
int dl[]={-1,0,1,1,0,-1},dc[]={0,-1,-1,0,1,1};
inline int find(int l,int c){
if(mat[l][c]==0)
return l*1000+c;
mat[l][c]=find(mat[l][c]/1000,mat[l][c]%1000);
return mat[l][c];
}
int main(){
FILE*fi,*fout;
int i,n,nr,j,con1,con2,l,c,x;
fi=fopen("hex.in" ,"r");
fout=fopen("hex.out" ,"w");
fscanf(fi,"%d" ,&n);
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
vf[i][j]=-1;
for(i=0;i<=n+1;i++)
mat[0][i]=mat[i][0]=mat[n+1][i]=mat[i][n+1]=-1;
i=0;
while(i<n*n){
fscanf(fi,"%d%d" ,&l,&c);
vf[l][c]=i%2;
con1=con2=0;
nr=l*1000+c;
for(j=0;j<6;j++)
if(mat[l+dl[j]][c+dc[j]]>-1&&vf[l+dl[j]][c+dc[j]]==i%2){
x=find(l+dl[j],c+dc[j]);
if(i%2==0){
if(x%1000==1||x%1000==n)
nr=x;
if(x%1000==1)
con1++;
if(x%1000==n)
con2++;
}
else{
if(x/1000==1||x/1000==n)
nr=x;
if(x/1000==1)
con1++;
if(x/1000==n)
con2++;
}
}
if(i%2==0){
if(c==1)
con1++;
if(c==n)
con2++;
}
else{
if(l==1)
con1++;
if(l==n)
con2++;
}
if(con1>0&&con2>0){
fprintf(fout,"%d" ,i+1);
i=n*n;
}
else{
if(nr!=1000*l+c)
mat[l][c]=nr;
for(j=0;j<6;j++)
if(mat[l+dl[j]][c+dc[j]]>-1&&vf[l+dl[j]][c+dc[j]]==i%2){
x=find(l+dl[j],c+dc[j]);
if(x!=nr)
mat[x/1000][x%1000]=nr;
}
}
i++;
}
fclose(fi);
fclose(fout);
return 0;
}