Pagini recente » Cod sursa (job #1361489) | Monitorul de evaluare | Cod sursa (job #973175) | Cod sursa (job #1027314) | Cod sursa (job #2078430)
#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]);
}
}
}
void fil2(int l,int c)
{
for(int i=0;i<4;i++)
{
if(prez[l+dx[i]][c+dy[i]]==1)
{
prez[l+dx[i]][c+dy[i]]=2;
ans++;
fil2(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);
}
if(k%m==0)
l=k/m;
else l=k/m+1;
if(k%m==0)
c=m;
else c=k%m;
ans=1;
prez[l][c]=2;
fil2(l,c);
fout<<ans;
return 0;
}