Pagini recente » Cod sursa (job #835942) | Cod sursa (job #1329060) | Cod sursa (job #1857428) | Cod sursa (job #2100918) | Cod sursa (job #1665281)
#include <fstream>
#define mod 20000
using namespace std;
ifstream f("castel.in");
ofstream g("castel.out");
short xi, yi, n, m, k, i, j, nr, a[152][152];
bool b[152][152], cheie[22555];
short incerc[152][152];
short dx[] = {-1, 0, 1, 0}, dy[] = {0, 1, 0, -1};
bool inauntru(int x, int y)
{
return (x >= 1 && x <= n && y >= 1 && y <= m);
}
void cauta()
{
int i, x, y, xx, yy;
int coada[2][mod], st = 0, dr = 0;
coada[0][st] = xi, coada[1][st] = yi;
b[xi][yi] = 1;
cheie[(xi-1)*m+yi] = 1;
while (st <= dr)
{
x = coada[0][st%mod], y = coada[1][st%mod];
for (i = 0; i < 4; i++)
{
xx = x+dx[i], yy = y+dy[i];
if (inauntru(xx, yy) && cheie[a[xx][yy]] == 1)
{
if (b[xx][yy] == 0)
{
dr++;
coada[0][dr%mod] = xx, coada[1][dr%mod] = yy;
incerc[xx][yy]++;
b[xx][yy] = 1;
cheie[(xx-1)*m+yy] = 1;
}
else if (b[xx][yy] == 1 && incerc[xx][yy] > 0)
{
incerc[xx][yy]--;
dr++;
coada[0][dr%mod] = xx, coada[1][dr%mod] = yy;
}
}
}
st++;
}
}
int main()
{
f >> n >> m >> k;
xi = k/m+(k%m > 0), yi = k%m;
for (i = 1; i <= n; i++)
for (j = 1; j <= m; j++)
f >> a[i][j];
cauta();
for (i = 1; i <= n; i++)
for (j = 1; j <= m; j++)
if (b[i][j] == 1)
nr++;
g << nr;
return 0;
}