Cod sursa(job #791686)
#include <fstream>
#include <queue>
#include <cstdlib>
#define f first
#define s second
#define mp make_pair
using namespace std;
int n,m,k,x1,y1,x2,y2;
int c[55][55];
ifstream f("kdrum.in");
ofstream g("kdrum.out");
void read();
void solve();
int main()
{
read();
solve();
f.close();g.close();
return 0;
}
void read()
{
f>>n>>m>>k>>x1>>y1>>x2>>y2;
for (int i=1;i<=n;i++)
for (int j=1;j<=m;j++)
f>>c[i][j];
}
void solve()
{
queue<pair<int,int> >que;
queue<pair<int,int> >cost;
que.push(mp(x1,y1));
cost.push(mp(c[x1][y1],1));
int dl[4]={0,1,0,-1},dc[4]={1,0,-1,0};
while (!que.empty())
{
pair<int,int>z=que.front();que.pop();
pair<int,int>cc=cost.front();cost.pop();
for (int t=0;t<4;t++)
{
int auxx=dl[t]+z.f,auxy=dc[t]+z.s,
aux=c[auxx][auxy];
if (auxx==x2 && auxy==y2 &&
!((cc.f*aux)%k))
{
g<<cc.s+1<<'\n'; f.close();g.close();
exit(0);
}
if (aux)
{
que.push(mp(auxx,auxy));
cost.push(mp(cc.f*aux,cc.s+1));
}
}
}
}