Pagini recente » Cod sursa (job #387992) | Cod sursa (job #2621672) | Cod sursa (job #1985475) | Cod sursa (job #3155020) | Cod sursa (job #2562472)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("castel.in");
ofstream fout("castel.out");
vector < int > cdx,cdy;
vector <int> cx[155*155],cy[155*155];
int n,m,rasp,v[155][155],k,p,u,x,y,nr[155][155],p2,u2;
int dx[4]={-1,0,1,0},dy[4]={0,1,0,-1};
bool acces[155*155],verif[155][155];
void bordare()
{
for(int i=0;i<=n+1;i++)
verif[i][0]=verif[i][m+1]=1;
for(int i=0;i<=m+1;i++)
verif[0][i]=verif[n+1][i]=1;
}
void citire()
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
fin>>v[i][j];
cx[v[i][j]].push_back(i);
cy[v[i][j]].push_back(j);
nr[i][j]=(i-1)*m+j;
}
}
}
int main()
{
fin>>n>>m>>k;
citire();
bordare();
if(k%m==0)cdx.push_back(k/m);
else cdx.push_back(k/m+1);
if(k%m==0)cdy.push_back(m);
else cdy.push_back(k%m);
x=cdx[u];
y=cdy[u];
acces[nr[x][y]]=1;
verif[x][y]=1;
while(p<=u)
{
x=cdx[p];
y=cdy[p];
for(int i=0;i<4;i++)
{
int xf=x+dx[i];
int yf=y+dy[i];
if(acces[v[xf][yf]]==1&&verif[xf][yf]==0)
{
u++;
cdx.push_back(xf);
cdy.push_back(yf);
acces[nr[xf][yf]]=1;
verif[xf][yf]=1;
}
}
for(int j=0;j<cx[nr[x][y]].size();j++)///parcurgem toate elem cu cheia nr
{
int x2=cx[nr[x][y]][j];
int y2=cy[nr[x][y]][j];
if(verif[x2][y2]==0)
{
for(k=0;k<4;k++) ///vedem daca are vecin accesibil
{
int x3=x2+dx[k];
int y3=y2+dy[k];
if(verif[x3][y3]==1) ///daca are, il bagam in coada
{
u++;
cdx.push_back(x2);
cdy.push_back(y2);
verif[x2][y2]=1;
acces[nr[x2][y2]]=1;
break;
}
}
}
}
p++;
}
fout<<u+1;
}