Pagini recente » Cod sursa (job #2298369) | Cod sursa (job #610063) | Cod sursa (job #2453532) | Cod sursa (job #867809) | Cod sursa (job #2214988)
#include <bits/stdc++.h>
using namespace std;
ifstream f("castel.in");
ofstream g("castel.out");
#define getKey(l,c) Key[(l-1)*M+c]=1,A[l][c]=0,nrCam++
int main()
{
int N,M,K;
int A[152][152]={0};
bitset<225000> Key;
Key[0]=0;
f>>N>>M>>K;
for(int i=1;i<=N;i++)
for(int j=1;j<=M;j++)
f>>A[i][j];
vector<int> L={K/M+1-(K%M==0)},C={(K%M==0)? M : K%M};
vector<bool> ok={1};
int nrCam=0;
getKey(L[0],C[0]);
bool moved=1;
auto add = [=,&A,&Key,&moved,&nrCam,&L,&C,&ok](int l,int c)
{
if(A[l][c]!=0 && Key[A[l][c]])
{
L.push_back(l),C.push_back(c);
ok.push_back(1);
getKey(l,c);
moved=1;
}
};
while(moved)
{
moved=0;
for(uint32_t i=0;i<L.size();i++)
{
if(ok[i])
{
int l=L[i],c=C[i];
add(l-1,c ), add(l+1,c ),
add(l ,c-1), add(l ,c+1);
if(L[i]>0 && L[i]<=N && C[i]>0 && C[i]<=M)
if (A[L[i]-1][C[i]]==0 && A[L[i]+1][C[i]]==0 &&
A[L[i]][C[i]-1]==0 && A[L[i]][C[i]+1]==0) ok[i]=0;
}
}
}
g<<nrCam;
f.close(),g.close();
return 0;
}