Pagini recente » Cod sursa (job #1105969) | Cod sursa (job #2414114) | Monitorul de evaluare | Statistici Tomescu Ilie Alexandru (Alexandru07) | Cod sursa (job #2078418)
#include <bits/stdc++.h>
#define mp make_pair
#define f first
#define s second
using namespace std;
ifstream fin("castel.in");
ofstream fout("castel.out");
int n,m,k,i,j;
int l,c,ans;
int a[160][160],prez[160][160],ch[22501];
int dx[]={0,0,1,-1},dy[]={1,-1,0,0};
queue < pair<int,int> >q[22501],qq;
pair <int,int> p;
void fil(int l,int c)
{
for(int i=0;i<4;i++)
{
if(!prez[l+dx[i]][c+dy[i]]&&ch[a[l+dx[i]][c+dy[i]]])
{
prez[l+dx[i]][c+dy[i]]=1;
ans++;
int nr=(l+dx[i]-1)*m+c+dy[i];
while(!q[nr].empty())
{
qq.push(q[nr].front());
q[nr].pop();
}
ch[nr]=1;
fil(l+dx[i],c+dy[i]);
}
}
}
int main()
{
fin>>n>>m>>k;
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
fin>>a[i][j];
q[a[i][j]].push(mp(i,j));
}
}
if(k%m==0)
l=k/m;
else l=k/m+1;
if(k%m==0)
c=m;
else c=k%m;
qq.push(mp(l,c));
prez[l][c]=1;
ans++;
while(!qq.empty())
{
p=qq.front();
qq.pop();
if(prez[p.f][p.s]==0)
{
ans++;
int nr=(p.f-1)*m+p.s;
while(!q[nr].empty())
{
qq.push(q[nr].front());
q[nr].pop();
}
prez[p.f][p.s]=1;
}
ch[m*(p.f-1)+p.s]=1;
fil(p.f,p.s);
}
fout<<ans;
return 0;
}