Cod sursa(job #57200)

Utilizator DastasIonescu Vlad Dastas Data 1 mai 2007 13:02:58
Problema Castel Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.43 kb
#include <cstdio>

FILE *in = fopen("castel.in","r"), *out = fopen("castel.out","w");

int m, n, k;
int a[152][152] = {{0}};

void read()
{
    fscanf(in, "%d %d %d", &m, &n, &k);

    for ( int i = 1; i <= m; ++i )
        for ( int j = 1; j <= n; ++j )
            fscanf(in, "%d", &a[i][j]);
}

struct coada
{
    int x, y;
};

int dx[] = {1, 0, -1, 0};
int dy[] = {0, 1, 0, -1};

int lee(int x, int y)
{
    coada b[23104];
    int p = 0, u = 0;
    b[p].x = x;
    b[p].y = y;
    int cnt = 1;
    int chei[23104] = {0};
    int viz[152][152] = {{0}};
    chei[k] = 1;
    viz[k/m+1][k%n] = 1;

    while ( p <= u )
    {
        for ( int i = 0; i < 4; ++i )
        {
            int X = b[p].x + dx[i];
            int Y = b[p].y + dy[i];

            if ( !viz[X][Y] && chei[a[X][Y]] == 1 )
            {
                ++u;
                b[u].x = X;
                b[u].y = Y;
                ++cnt;
                chei[n*X-(n-Y)] = 1;
                viz[X][Y] = 1;
            }
        }
        ++p;
    }

//    for ( int i = 0; i <= 25; ++i )
//        printf("%d ", chei[i]);
//    printf("\n");

    return cnt;
}

int main()
{
    read();

//    for ( int i = 1; i <= m; ++i )
//    {
//        for ( int j = 1; j <= n; ++j )
//            printf("%d ", a[i][j]);
//        printf("\n");
//    }

    fprintf(out, "%d\n", lee(k/m+1, k%n));




	return 0;
}