Cod sursa(job #1959747)

Utilizator MihaelaCismaruMihaela Cismaru MihaelaCismaru Data 9 aprilie 2017 21:10:23
Problema Castel Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.5 kb
#include<fstream>
using namespace std;
ifstream in("castel.in");
ofstream out("castel.out");
int dx[5] = { 0,0,0,1,-1}, dy[5] = { 0,1,-1,0,0};
int  a,b,c,d,p,m,n,i,j,dr,st,sol,k;
pair<int,int>v[30001],mat[155][155];
int hz[1001];
int main(){
    in >> n >> m >> p;
    for( i = 1; i <= n; i ++ ){
        for( j = 1; j <= m; j ++ ){
            in >> mat[i][j].first;
        }
    }
    if( p % m == 0 ){
        v[1].first = p/m;
        v[1].second = m;
    }
    else{
        v[1].first = p/m +1;
        v[1].second = p%m;
    }
    mat[v[1].first][v[1].second].second = 1;
    hz[p] = 1;
    for( k = 1; k <= n*m; k ++ ){
        for( st = 1, dr = 1; st <= dr; st ++ ){
            for( i = 1; i <= 4; i ++ ){
                a = v[st].first;
                b = v[st].second;
                c = a + dx[i];
                d = b + dy[i];
                if( d != m ){
                    p = m*(c-1) + d;
                }
                else{
                    p = m * c;
                }
                if( c >= 1 && d >= 1 && c <= n && d <= m && mat[c][d].second <=k && hz[ mat[c][d].first ] == 1 ){
                    dr ++ ;
                    v[dr].first = c;
                    v[dr].second = d;
                    if( mat[c][d].second == 0 ){
                        sol ++ ;
                    }
                    mat[c][d].second ++;
                    hz[ p ] = 1;
                }
            }
        }
    }
    out << sol + 1;
    return 0;
}