Pagini recente » Cod sursa (job #1287203) | tema | Cod sursa (job #1795994) | Cod sursa (job #2121055) | Cod sursa (job #2517947)
#include <fstream>
#include <vector>
#define f in
#define g out
using namespace std;
ifstream in ( "castel.in" );
ofstream out( "castel.out" );
int n, m, i, j, k, p, u, c, l, poz;
int a[200][200], d[2][40000], fr[200][200], cheie[200][200];
int di[] = { 1, -1, 0, 0 };
int dj[] = { 0, 0, 1, -1 };
vector< pair < int, int > > v[40000];
int lin ( int poz ){
if ( poz % m == 0 )
return poz/m;
return poz/m+1;
}
int col ( int poz ){
if ( poz % m == 0 )
return m;
return poz % m;
}
int main() {
f>>n>>m>>k;
for ( i=1; i <= n; i++ )
for ( j=1; j <= m; j++ )
f>>a[i][j];
l = 0; c = 1;
p = u = 1;
d[l][1] = lin(k);
d[c][1] = col(k);
fr[ lin(k) ][ col(k) ] = 1;
while ( p <= u ){
int ic = d[l][p];
int jc = d[c][p];
poz = (ic-1)*m + jc;
cheie[ic][jc] = 1;
for ( int i = 0; i < v[poz].size(); i++ ){
d[l][++u] = v[poz][i].first;
d[c][u] = v[poz][i].second;
}
for ( int i = 0; i < 4; i++ ){
int iv = ic + di[i];
int jv = jc + dj[i];
if ( iv && jv && iv <= n && jv <= m && !fr[iv][jv] ){
fr[iv][jv] = 1;
if ( cheie[ lin(a[iv][jv]) ][ col(a[iv][jv]) ] ){
d[l][++u] = iv;
d[c][u] = jv;
} else v[ a[iv][jv] ].push_back({iv,jv});
}
}
p++;
}
int sol = 0;
for ( i=1; i <= n; i++ )
for ( j=1; j <= m; j++ )
if ( cheie[i][j] )
sol++;
g<<sol;
return 0;
}