Pagini recente » Cod sursa (job #724872) | Cod sursa (job #2990851) | Clasament simulareoni | Cod sursa (job #1737574) | Cod sursa (job #2110150)
#include <fstream>
using namespace std;
ifstream in("kdrum.in");
ofstream out("kdrum.out");
int a[51][51],b[51],ok=1,N,M,K,x1,x2,y1,y2,nr,p;
void restart();
void vertical(int x,int y);
void lateral(int x,int y)
{
p*=a[x][y]; nr++;
if(a[x][y]==a[x2][y2]) ok=0;
else if(a[x][y+1]!=0 and (y+1)<=y2)
lateral(x,y+1);
else if(a[x+1][y]!=0 and (x+1)<=x2)
vertical(x+1,y);
else {ok--; restart();}
}
void vertical(int x,int y)
{
p*=a[x][y]; nr++;
if(a[x][y]==a[x2][y2]) ok=0;
else if(a[x+1][y]!=0 and (x+1)<=x2)
vertical(x+1,y);
else if(a[x][y+1]!=0 and (y+1)<=y2)
lateral(x,y+1);
else { ok--; restart();}
}
void restart()
{
p=1; nr=0;
if(ok==1)
lateral(x1,y1);
else vertical(x1,y1);
}
int main()
{
in>>N>>M>>K>>x1>>y1>>x2>>y2;
for(int k1=1;k1<=N;k1++)
for(int k2=1;k2<=M;k2++)
in>>a[k1][k2];
int ok=1,i=1,minim;
restart();
if(p%K==0) { b[i]=nr; i++;}
if(ok==1) { ok=0; restart();}
minim=b[1];
for(int k=2;k<=N*M;k++)
{
if(b[k]==0) k=N*M+200;
if(b[k]<minim) minim=b[k];
}
out<<minim;
return 0;
}