Pagini recente » Statistici Cruceru Vlad (vlad23456) | Profil unibuc.big.dawgs | Cod sursa (job #205866) | dedicatie | Cod sursa (job #2144328)
#include <cstdio>
#include <algorithm>
#include <vector>
using namespace std;
vector < pair<int, int> > v;
int dx[] = {0, 1, 0, -1};
int dy[] = {-1, 0, 1, 0};
int mat[155][155];
bool key[23000];
int main() {
freopen("castel.in", "r", stdin);
freopen("castel.out", "w", stdout);
int N, M, start;
scanf("%d%d%d", &N, &M, &start);
for(int i = 1; i <= N; i++)
for(int j = 1; j <= M; j++)
scanf("%d", &mat[i][j]);
auto startp = make_pair(start / M + 1, start % M == 0 ? M : start % M);
int count = 1, done = 0;
v.push_back(startp);
mat[startp.first][startp.second] = 0;
key[start] = 1;
while(!done) {
done = 1;
for(auto poz: v)
for(int i = 0; i < 4; i++)
if(mat[poz.first + dx[i]][poz.second + dy[i]] && key[mat[poz.first + dx[i]][poz.second + dy[i]]]) {
count++;
int nr = (poz.first + dx[i] - 1) * M + poz.second + dy[i];
key[nr] = 1;
mat[poz.first + dx[i]][poz.second + dy[i]] = 0;
v.push_back(make_pair(poz.first + dx[i], poz.second + dy[i]));
done = 0;
}
}
printf("%d\n", count);
}