Pagini recente » Cod sursa (job #1923006) | Cod sursa (job #1413146) | Cod sursa (job #1801250) | Cod sursa (job #523438) | Cod sursa (job #1659351)
#include <fstream>
using namespace std;
ifstream fin("kdrum.in");
ofstream fout("kdrum.out");
int a[51][51],n,m,k,x1,y1,x2,y2,d[1001],p,u,b[51][51],Max,l=1;
int dl[4]={-1,0,1,0};
int dc[4]={0,-1,0,1};
struct element{
int l,c,nr;}c[2501];
void cit(){
fin>>n>>m>>k;
fin>>x1>>y1>>x2>>y2;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++){
fin>>a[i][j];
if(a[i][j]>Max)
Max=a[i][j];}
}
int sub(int i,int j,int y){
int m;
if(i>j)
return 0;
m=(i+j)/2;
if(d[m]==y)
return m;
if(y<d[m])
return sub(i,m-1,y);
return sub(m+1,j,y);}
void afis(){
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++)
fout<<a[i][j]<<" ";
fout<<'\n';}}
void multiplu(){
int i;
for(i=1;i<=Max;i++)
if(k%i==0){
d[l]=i;
l++;}}
void Lee(){
int in,jn,dn,i,j,d,k;
p=u=1;
c[u].l=x1;
c[u].c=y1;
c[u].nr=0;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
b[i][j]=-1;
b[x1][y1]=0;
while(p<=u){
i=c[p].l;
j=c[p].c;
d=c[p].nr;
for(k=0;k<4;k++){
in=i+dl[k];
jn=j+dc[k];
dn=d+1;
if(in>0&&jn>0&&in<n+1&&jn<m+1&&b[in][jn]==-1&&a[in][jn]==1){
u++;
c[u].l=in;
c[u].c=jn;
c[u].nr=dn;
b[in][jn]=dn;}}
p++;}}
int main(){
cit();
int i,j;
multiplu();
/*for(i=1;i<=k;i++)
if(k%i==0){
d[l]=i;
l++;}*/
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(sub(1,l,a[i][j])!=0)
a[i][j]=1;
else
a[i][j]=0;
Lee();
fout<<b[x2][y2]+1;
return 0;}