Pagini recente » Cod sursa (job #1216028) | Cod sursa (job #135676) | Cod sursa (job #1260124) | Cod sursa (job #336216) | Cod sursa (job #1167217)
#include <cstdio>
#include <queue>
#include <set>
#include <bitset>
using namespace std;
queue <int> Q;
set <int> v[22505];
int a[155][155],cc,ll;
int dx[]= {-1,0,1,0},
dy[]= {0,1,0,-1};
bitset <22505> f;
inline int conv1(int l,int c,int m) {
return (l-1)*m+c;
}
inline void conv2(int k,int n,int m) {
ll=k/m;
if(k%m==0) {
cc=m;
return ;
}
ll=k/m+1;
cc=k%m;
}
int main() {
freopen("castel.in","r",stdin);
freopen("castel.out","w",stdout);
int n,m,k,aux,new_x,new_y,l,c,Size,temp;
scanf("%d%d%d",&n,&m,&k);
for(int i=1; i<=n; ++i) {
for(int j=1; j<=m; ++j) {
scanf("%d",&a[i][j]);
}
}
Q.push(k);
while(!Q.empty()) {
aux=Q.front();
conv2(aux,n,m);
f[aux]=1;
for(int i=0; i<4; ++i) {
new_x=dx[i]+ll;
new_y=dy[i]+cc;
if(a[new_x][new_y]!=0 && f[conv1(new_x, new_y, m)] == 0) {
if(v[aux].size()!=0) {
Size=v[aux].size();
for(int j=0; j<Size; ++j) {
Q.push(a[aux][j]);
v[aux].erase(a[aux][j]);
}
}
temp=conv1(new_x,new_y,m);
if(f[a[new_x][new_y]]==1) {
Q.push(temp);
f[temp]=1;
} else {
v[a[new_x][new_y]].insert(temp);
}
}
}
Q.pop();
}
printf("%d",f.count());
return 0;
}