Cod sursa(job #202664)
#include <stdio.h>
#define N_MAX 151
#define NMAX 22510
#define TRUE 1
#define FALSE 0
#define FIN "castel.in"
#define FOUT "castel.out"
int N,M,K;
int A[N_MAX][N_MAX];
int B[N_MAX][N_MAX];
int Vcx[NMAX];
int V[NMAX];
int Vcy[NMAX];
int i,j,ok,nr,x1,y1;
int REZ;
void fill(int x, int y)
{
if (V[A[x][y]]==1)
{
if (B[x][y]==0)
{
ok=TRUE;
REZ++;
Vcx[REZ]=x;
Vcy[REZ]=y;
B[x][y]=1;
V[(x-1)*M+y]=1;
}
}
}
void read()
{
freopen(FIN,"rt",stdin);
freopen(FOUT,"wt",stdout);
scanf("%d %d %d", &N, &M, &K);
for (i=1;i<=N;++i)
for (j=1;j<=M;++j)
scanf("%d", &A[i][j]);
}
void solve()
{
for (i=1;i<=N;++i)
{
A[i][0]=-1;
A[i][M+1]=-1;
}
for (i=1;i<=N;++i)
{
A[0][i]=-1;
A[N+1][i]=-1;
}
x1=(K+M-1)/M;
y1=K%M;
if (y1==0)
y1=M;
Vcx[1]=x1;
Vcy[1]=y1;
REZ=1;
V[K]=1;
ok=TRUE;
while (ok==TRUE)
{
ok=FALSE;
i=0;
while (i<REZ)
{
i++;
fill(Vcx[i]-1,Vcy[i]);
fill(Vcx[i]+1,Vcy[i]);
fill(Vcx[i],Vcy[i]+1);
fill(Vcx[i],Vcy[i]-1);
}
}
}
void write()
{
printf("%d", REZ-1);
printf("\n");
}
int main()
{
read();
solve();
write();
return 0;
}