Pagini recente » Cod sursa (job #2311717) | Cod sursa (job #1420086) | Cod sursa (job #2303354) | Cod sursa (job #2132870) | Cod sursa (job #2522713)
#include <fstream>
#include<queue>
using namespace std;
ifstream fin("castel.in");
ofstream fout("castel.out");
int dl[]={-1,0,1,0};
int dc[]={0,1,0,-1};
int l1,c1,l,c,i,j,s,n,a[152][152],C[152][152],p,u,t,x,y,v[40004],m,u1,u2,z;
struct coada
{
int l,c;
};
coada q[40004],q1[40004];
void lee()
{
while(p<=u)
{
l=q[p].l;
c=q[p].c;
p++;
t=0;
for(int i=0;i<4;i++)
{
l1=l+dl[i];
c1=c+dc[i];
if(a[l1][c1]==0 && v[C[l1][c1]]==1)
{
q[++u].l=l1;
q[u].c=c1;
s++;
v[(l1-1)*m+c1]=1;
a[l1][c1]=1;
}
if(a[l1][c1]==0)
t=1;
}
if(t==1)
{
q1[++u1].l=l;
q1[u1].c=c;
}
}
p=1;
u=0;
u2=u1;
for(int p1=1;p1<=u1;p1++)
{
l=q1[p1].l;
c=q1[p1].c;
t=0;
for(int i=0;i<4;i++)
{
l1=l+dl[i];
c1=c+dc[i];
if(a[l1][c1]==0 && v[C[l1][c1]]==1)
{
a[l1][c1]=1;
t=0;
q[++u].l=l1;
q[u].c=c1;
s++;
v[(l1-1)*m+c1]=1;
}
if(a[l1][c1]==0)
t=1;
}
if(t==1)
{
q[++u2].l=l;
q[u2].c=c;
}
}
for(int i=u1+1;i<=u2;i++)
{
q[i-u1].l=q[i].l;
q[i-u1].c=q[i].c;
}
u1=u2-u1;
if(u>0)
lee();
}
int main()
{
fin>>n>>m>>z;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
fin>>C[i][j];
x=z/m+1;
y=z%n;
if(z%n==0)
y=n;
q[1].l=x;
q[1].c=y;
p=u=1;
for(int i=1;i<=n;i++)
a[i][0]=a[i][m+1]=-1;
for(int i=1;i<=m;i++)
a[0][i]=a[n+1][i]=-1;
s=1;
a[x][y]=1;
v[z]=1;
v[C[x][y]]=1;
lee();
fout<<s;
return 0;
}