Pagini recente » Cod sursa (job #191089) | Cod sursa (job #2430854) | Cod sursa (job #1649272) | Cod sursa (job #2480688) | Cod sursa (job #2110171)
#include <bits/stdc++.h>
using namespace std;
ifstream f("kdrum.in");
ofstream g("kdrum.out");
int n,m,k,xi,yi,xf,yf;
int a[52][52];
int b[52][52];
int ind[12002];
int d[12002];
int diri[]={-1,0,1,0};
int dirj[]={0,1,0,-1};
int ver(int i,int j){
return (i>0&&i<=n&&j>0&&j<=m&&a[i][j]!=-1);
}
int cmmdc(int a,int b){
if(b==0)return a;
return cmmdc(b,a%b);
}
int lee(){
deque <int> di,dj,nr;
di.push_back(xi);
dj.push_back(yi);
nr.push_back(d[a[xi][yi]]);
b[xi][yi]=1;
while(!di.empty()){
int ii=di.front();
int jj=dj.front();
int nnr=nr.front();
di.pop_front();
dj.pop_front();
nr.pop_front();
if(ii==xf&&jj==yf&&nnr==d[k])return b[xf][yf];
for(int dir=0;dir<=3;dir++){
int ni=ii+diri[dir],nj=jj+dirj[dir];
if(ver(ni,nj)&&b[ni][nj]==0){
int indice=d[cmmdc(a[ni][nj]*ind[nnr],k)];
b[ni][nj]=b[ii][jj]+1;
di.push_back(ni);
dj.push_back(nj);
nr.push_back(indice);
}
}
}
return b[xf][yf];
}
void citire(){
f>>n>>m>>k>>xi>>yi>>xf>>yf;
for(int i=1;i<=n;i++)for(int j=1;j<=m;j++){
int x;
f>>x;
if(x==0)a[i][j]=-1;
else {
a[i][j]=cmmdc(k,x);
}
}
}
void rez(){
int nrdiv=0,i=2;
d[1]=1;
while(i<=k){
if(k%i==0){
d[i]=nrdiv;
ind[nrdiv]=i;
nrdiv++;
}i++;
}
}
int main(){
citire();
rez();
g<<lee()<<"\n";
return 0;
}