Pagini recente » Cod sursa (job #1289197) | Cod sursa (job #2671041) | Cod sursa (job #3277494) | Cod sursa (job #307977) | Cod sursa (job #2425045)
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
ifstream f("kdrum.in");
ofstream g("kdrum.out");
short c[900500][3];
short divi[12500];
const int dx[4]={-1,0,1,0};
const int dy[4]={0,1,0,-1};
int v[55][55],n,m,k,li,ci,cf,lf,lee[55][55][100];
int cmmmdc(int a,int b)
{
int r;
while(b!=0)
{
r=a%b;
a=b;
b=r;
}
return a;
}
int main()
{
f>>n>>m>>k;
f>>li>>ci>>lf>>cf;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
f>>v[i][j];
}
}
int catidiv=0;
for(int i=1;i<=k;i++)
{
if(k%i==0)
{
catidiv++;
divi[i]=catidiv;
}
}
int p=1;
int u=1;
c[1][0]=li;
c[1][1]=ci;
c[1][2]=cmmmdc(v[li][ci],k);
lee[li][ci][divi[cmmmdc(v[li][ci],k)]]=1;
while(p<=u)
{
int x0=c[p][0];
int y0=c[p][1];
int d0=c[p][2];
for(int i=0;i<4;i++)
{
int x=x0+dx[i];
int y=y0+dy[i];
if(v[x][y]!=0)
{
int d=cmmmdc((d0*v[x][y]),k);
if(lee[x][y][divi[d]]==0)
{
lee[x][y][divi[d]]=lee[x0][y0][divi[d0]]+1;
u++;
c[u][0]=x;
c[u][1]=y;
c[u][2]=d;
}
}
}
p++;
}
g<<lee[lf][cf][divi[k]];
}