Pagini recente » Cod sursa (job #1810185) | Cod sursa (job #2528040) | Cod sursa (job #171557) | Cod sursa (job #2223916) | Cod sursa (job #798730)
Cod sursa(job #798730)
#include <fstream>
using namespace std;
ifstream f("kdrum.in");
#define ll long long
ofstream g("kdrum.out");
#include <queue>
#define LE1 55
#define inf 1<<30
#define Maxdiv 300
int xx[]= {1,-1,0,0};
int yy[]= {0,0,-1,1};
int best[LE1][LE1][Maxdiv];
int n,m,k,i,j;
int a[LE1][LE1];
int Fr[Maxdiv];
int value;
struct trei
{
int lin,col,div;
};
queue <trei> que ;
trei X,X2;
int euclid(ll A,ll B)
{
if (B==0) return A;
return euclid(B,A%B);
}
int BFS()
{
while (true)
{
trei T=que.front();
que.pop();
if (T.lin==X2.lin&&T.col==X2.col&&T.div==X2.div)
return best[T.lin][T.col][Fr[T.div]];
for(i=0; i<4; ++i) if (a[T.lin+xx[i]][T.col+yy[i]]!=0)
{
value=Fr[euclid(T.div*a[T.lin+xx[i]][T.col+yy[i]],k)];
if (best[T.lin+xx[i]][T.col+yy[i]][value]>best[T.lin][T.col][Fr[T.div]]+1)
{
best[T.lin+xx[i]][T.col+yy[i]][value]=best[T.lin][T.col][Fr[T.div]]+1;
X.lin=T.lin+xx[i];
X.col=T.col+yy[i];
X.div=euclid(T.div*a[T.lin+xx[i]][T.col+yy[i]],k);
que.push(X);
}
}
}
}
int main()
{
f>>n>>m>>k;
f>>X.lin>>X.col>>X2.lin>>X2.col;
for(i=1; i<=n; ++i)
for(j=1; j<=m; ++j)
f>>a[i][j];
int maxd=0;
for(i=1; i<=k; ++i)
if (k%i==0)
{
++maxd;
Fr[i]=maxd;
}
for(i=1; i<=n; ++i)
for(j=1; j<=m; ++j)
for(int d=1; d<=maxd; ++d)
best[i][j][d]=inf;
X.div=a[X.lin][X.col];
best[X.lin][X.col][X.div]=1;
X2.div=k;
que.push(X);
g<<BFS()<<'\n';
f.close();
g.close();
return 0;
}