Cod sursa(job #845758)

Utilizator gerd13David Gergely gerd13 Data 31 decembrie 2012 14:56:19
Problema Castel Scor 100
Compilator cpp Status done
Runda pregatire_oni_baraj_juniori Marime 1.45 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 ) ;
}