Pagini recente » Cod sursa (job #1397910) | Cod sursa (job #1978593) | Cod sursa (job #727071) | Cod sursa (job #1026675) | Cod sursa (job #730707)
Cod sursa(job #730707)
#include <cstdio>
#include <fstream>
#include <queue>
using namespace std;
#define f first
#define s second
#define mp make_pair
const int di[]={0,0,1,-1},
dj[]={-1,1,0,0};
int a[64][64],bst[64][64][256],v[12001],dv[256],n,m,k;
pair<int,int> start,finish;
queue<pair<int,pair<int,int> > > q;
void read ()
{
ifstream in ("kdrum.in");
in>>n>>m>>k>>start.f>>start.s>>finish.f>>finish.s;
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j)
in>>a[i][j];
}
bool in_m (int i,int j){
return i<=n&&i>0&&j<=m&&j>0;}
int cmmdc (int x,int y)
{
if(!y)
return x;
return cmmdc(y,x%y);
}
void solve ()
{
for(int i=1;i<=k;++i)
if(n%i==0)
{
dv[++dv[0]]=i;
v[i]=dv[0];
}
bst[start.f][start.s][1]=1;
for(q.push(mp(1,start));q.size();q.pop())
{
int d=q.front().f,x=q.front().s.f,y=q.front().s.s;
for(int kk=0;kk<4;++kk)
{
int i=x+di[kk],j=y+dj[kk];
if(in_m(i,j)&&a[i][j])
{
int d3=v[cmmdc(a[i][j]*dv[d],k)];
if(bst[i][j][d3]==0)
{
q.push(mp(d3,mp(i,j)));
bst[i][j][d3]=bst[x][y][d]+1;
}
}
}
}
}
void out ()
{
freopen ("kdrum.out","w",stdout);
printf("%d",bst[finish.f][finish.s][v[k]]);
}
int main ()
{
read ();
solve ();
out ();
return 0;
}