Cod sursa(job #845723)

Utilizator SpiderManSimoiu Robert SpiderMan Data 31 decembrie 2012 14:04:31
Problema Castel Scor 100
Compilator cpp Status done
Runda pregatire_oni_baraj_juniori Marime 1.44 kb
# include <algorithm>
# include <cstdio>
using namespace std ;

# define x first
# define y second

typedef pair < int, int > PR ;
const char *FIN = "castel.in", *FOU = "castel.out" ;
const int MAX = 155 ;
const int dx[] = {1, 0, -1,  0}, dy[] = {0, 1,  0, -1} ;

int A[MAX][MAX], B[MAX][MAX] ;
int ck[MAX * MAX] ;
int N, M, K, sol ;

void lee ( PR fs ) {
    PR Q[MAX * MAX] ; int stop = 1, dr = 1 ;
    for ( ck[K] = 1, Q[1] = fs ; stop ; ) {
        stop = 0 ;
        for ( int st = 1; st <= dr; ++st ) {
            PR rec = Q[st] ;
            for ( int k = 0; k < 4; ++k ) {
                PR act = rec ;
                act.x += dx[k], act.y += dy[k] ;
                if ( B[ act.x ][ act.y ] == 0 && ck[ A[ act.x ][ act.y ] ] ) {
                    B[ act.x ][ act.y ] = 1, Q[++dr] = act ;
                    ck[ (act.x - 1) * M + act.y ] = stop = 1 ;
                }
            }
        }
    }
}

int main ( void ) {
    freopen ( FIN, "r", stdin ) ;

    scanf ( "%d %d %d", &N, &M, &K ) ;
    PR fs ( K / M, K % M ) ;
    fs.y ? ++fs.x : fs.y = M ;

    for ( int i = 1; i <= N; ++i ) {
        for ( int j = 1; j <= M; ++j ) {
            scanf ( "%d", A[i] + j ) ;
        }
    }

    B[ fs.x ][ fs.y ] = 1, lee ( fs ) ;
    for ( int i = 1; i <= N; ++i ) {
        for ( int j = 1; j <= M; ++j ) {
            sol += B[i][j] ;
        }
    }

    fprintf ( fopen ( FOU, "w" ) , "%d", sol ) ;
}