Mai intai trebuie sa te autentifici.
Cod sursa(job #1152931)
Utilizator | Data | 25 martie 2014 09:20:24 | |
---|---|---|---|
Problema | Castel | Scor | 30 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 1.93 kb |
#include <cstdio>
using namespace std;
int x[159][159],y[160][160],z[160][160],chei[30000],cam[30000],cam2[30000];
int main()
{
int n,m,k,op,nr,i,j,sum,li,ci;
FILE *f=fopen("castel.in","r");
FILE *g=fopen("castel.out","w");
fscanf(f,"%d%d%d",&n,&m,&k);
for(i=1; i<=n; ++i)
for(j=1; j<=m; ++j)
{
fscanf(f,"%d",&x[i][j]);
}
li=(k-1)/m+1;
ci=(k-1)%m+1;
for(i=1; i<=n; ++i)
for(j=1; j<=m; ++j)
z[i][j]=(i-1)*m+j;
int k1[4]= {0,0,1,-1},k2[4]= {-1,1,0,0},nchei,ncam;
for(i=1; i<=n; ++i)
x[i][0]=x[i][m+1]=-1;
for(i=1; i<=m; ++i)
x[0][i]=x[n+1][i]=-1;
nchei=1;
chei[1]=x[li][ci];
y[li][ci]=1;
int ok=0;
ncam=0;
int kap;
for(kap=0; kap<=3; ++kap)
if(x[li+k1[kap]][ci+k2[kap]]!=-1&&y[li+k1[kap]][ci+k2[kap]]!=1)
{
++ncam;
cam[ncam]=li+k1[kap];
cam2[ncam]=ci+k2[kap];
y[cam[ncam]][cam2[ncam]]=1;
}
while(ok==0)
{
ok=1;
for(i=1; i<=nchei; ++i)
{
for(j=1; j<=ncam; ++j)
{
if(chei[i]==x[cam[j]][cam2[j]]&&cam[j]!=0)
{
ok=0;
++nchei;
chei[nchei]=(cam[j]-1)*m+cam2[j];
for(kap=0; kap<=3; ++kap)
{
if(x[cam[j]+k1[kap]][cam2[j]+k2[kap]]!=-1&&y[cam[j]+k1[kap]][cam2[j]+k2[kap]]!=1)
{
++ncam;
cam[ncam]=cam[j]+k1[kap];
cam2[ncam]=cam2[j]+k2[kap];
y[cam[ncam]][cam2[ncam]]=1;
}
}
cam[j]=0;
}
}
}
}
fprintf(g,"%d\n",nchei);
fclose(g);
return 0;
}