Pagini recente » Cod sursa (job #2631313) | Cod sursa (job #2221360) | Cod sursa (job #2254453) | Cod sursa (job #2631707) | Cod sursa (job #80210)
Cod sursa(job #80210)
#include<stdio.h>
int n, k, m, q[23000], chei[23000], i, a[23000], p, x, xx, car[23000], sol, mm, lng[23000];
int (*gs)[100] = new int[22500][100];
int dx(int i){
switch(i){
case 0: return 1;
case 1: return -1;
case 2: return n;
case 3: return -n;
}
return 0;
}
int main()
{
freopen("castel.in","r",stdin);
freopen("castel.out","w",stdout);
scanf("%d%d%d", &mm, &n, &k);
for (i=1; i<=mm*n; i++)
scanf("%d", &a[i]);
q[1] = k;
car[k] = 1;
sol = 1;
p = 0;
m = 1;
while (p < m){
p ++;
x = q[p];
for (i=0; i<4; i++){
xx =x+dx(i);
if (xx > 0 && xx <= n*mm && ((x % n != 1 || xx != x-1) && (x % n != 0 || xx != x+1))){
if (!car[xx]){
if (chei[a[xx]]){
sol ++;
q[++m] = xx;
}
else
gs[a[xx]][++lng[a[xx]]] = xx;
car[xx] = 1;
}
}
}
if (!chei[x]){
chei[x] = 1;
sol += lng[x];
for (i=1; i<=lng[x]; i++)
q[++m] = gs[x][i];
}
}
printf("%d\n", sol);
fclose(stdin);
fclose(stdout);
return 0;
}