Pagini recente » Cod sursa (job #2068205) | Cod sursa (job #1389925) | Cod sursa (job #2651853) | Cod sursa (job #866932) | Cod sursa (job #3203007)
#include <fstream>
#include <queue>
#include <bitset>
#include <vector>
#define nmax 155
using namespace std;
ifstream cin("castel.in");
ofstream cout("castel.out");
const int dx[]= {-1,0,1,0};
const int dy[]= {0,1,0,-1};
int n, m, k, l, c, sol;
int a[nmax][nmax], ch[nmax][nmax];
bool viz[nmax][nmax];
queue<pair<int,int>>q;
vector<pair<int,int>> L[nmax*nmax];
int main()
{
cin>>n>>m>>k;
for(int i=1; i<=n; i++)
for(int j=1; j<=m; j++)
cin>>a[i][j];
if(k%m==0)
l=k/m,c=m;
else
l=k/m+1,c=k%m;
q.push({l,c});
viz[l][c]=1;
while(!q.empty())
{
int xs=q.front().first;
int ys=q.front().second;
int nr=(xs-1)*m+ys;
for(int i=0; i<L[nr].size(); i++)
q.push({L[nr][i].first,L[nr][i].second});
ch[xs][ys]=1;
for(int i=0; i<4; i++)
{
int x1=xs+dx[i];
int y1=ys+dy[i];
if(1<=x1&&x1<=n &&1<=y1&&y1<=m&&viz[x1][y1]==0)
{
int lin=0,col=0;
if(a[x1][y1]%m==0)
lin=a[x1][y1]/m,col=m;
else
lin=a[x1][y1]/m+1, col=a[x1][y1]%m;
if(ch[lin][col]==1)
q.push({x1,y1}),viz[x1][y1]=1;
else
L[a[x1][y1]].push_back({x1,y1}),viz[x1][y1]=1;
}
}
q.pop();
}
for(int i=1; i<=n; i++)
for(int j=1; j<=m; j++)
if(ch[i][j])
sol++;
cout<<sol;
return 0;
}