Pagini recente » Monitorul de evaluare | Cod sursa (job #1592852) | Cod sursa (job #38161) | Cod sursa (job #994545) | Cod sursa (job #579978)
Cod sursa(job #579978)
# include <stdio.h>
struct poz {
short i, j;
};
poz in;
const int dx[] = {1, 0,-1, 0};
const int dy[] = {0, 1, 0, -1};
int n, m, k, i, j, sol;
short key[151 * 151];
poz Q[151 * 151];
short a[151][151], b[151][151];
void make (){
int ok = 1, dr = 1;
Q[1] = in;
key[k] = 1;
while (ok){
ok = 0;
for (int st = 1; st <= dr; ++st){
poz ret = Q[st];
for (int k = 0; k < 4; ++k){
poz acm = ret;
acm.i += dx[k];
acm.j += dy[k];
if (!b[acm.i][acm.j] && key[a[acm.i][acm.j]]){
b[acm.i][acm.j] = 1;
Q[++dr] = acm;
key[ (acm.i - 1) * m + acm.j ] = 1;
ok = 1;
}
}
}
}
}
int main (){
freopen ("castel.in", "r", stdin);
freopen ("castel.out", "w", stdout);
scanf ("%d%d%d", &n, &m, &k);
in.i = k / m;
in.j = k % m;
if (in.j){
++in.i;
}
else{
in.j = m;
}
for (i = 1; i <= n; ++i)
for (j = 1; j <= m; ++j){
scanf ("%hd", &a[i][j]);
}
b[in.i][in.j] = 1;
make ();
for (i = 1; i <= n; ++i)
for (j = 1; j <= m; ++j)
sol += b[i][j];
printf ("%d\n", sol);
return 0;
}