Pagini recente » Monitorul de evaluare | Monitorul de evaluare | Cod sursa (job #2004545) | Cod sursa (job #426440) | Cod sursa (job #433531)
Cod sursa(job #433531)
#include<iostream>
#include<fstream>
using namespace std;
ifstream fin("kdrum.in");
ofstream fout("kdrum.out");
int N,M,K,i;
int dx[]={-1,0,1,0}, dy[]={0,1,0,-1};
int qi[60000],qj[60000],prod,minim=25000;
int A[52][52],xstart,ystart,xfinal,yfinal,j,L[52][52],first,last,o[52][52],inou,jnou;
void read()
{
fin>>N>>M>>K;
fin>>xstart>>ystart;
fin>>xfinal>>yfinal;
for(i=1;i<=N;i++)
for(j=1;j<=M;j++)
fin>>A[i][j];
}
void bordeaza()
{
for(i=0;i<=N+1;i++)
{
A[i][0]=-1;
A[i][M+1]=-1;
}
for(j=0;j<=M+1;j++)
{
A[0][j]=-1;
A[N+1][j]=-1;
}
}
void solve()
{
int pas = 0;
int prod = 1;
for(i=1;i<=N;i++)
for(j=1;j<=M;j++)
if(L[i][j]==2)
{
pas++;
prod*=A[i][j];
}
if(prod % K == 0)
if(pas < minim)
{
minim = pas;
fout<<minim;
}
}
int ct = 0;
void cauta(int x, int y)
{
L[x][y]=2;
if(x==xfinal && y==yfinal)
solve();
else
if(minim==25000)
for(int dir=0;dir<4;dir++)
if(L[x+dx[dir]][y+dy[dir]]==0 && A[x+dx[dir]][y+dy[dir]]!=-1 && (x+dx[dir]<=N && y+dy[dir]<=M) && (x+dx[dir]>=1 && y+dy[dir]>=1))
cauta(x+dx[dir], y+dy[dir]);
L[x][y]=0;
}
int isempty()
{
if (first == last)
return 1;
else return 0;
}
int main()
{
read();
bordeaza();
//cauta(xstart,ystart);
for(i=0;i<=N+1;i++)
for(j=0;j<=M+1;j++)
o[i][j]=N*M;
o[xstart][ystart]=1;
qi[last]=xstart;
qj[last]=ystart;
last++;
while (!isempty()){
i=qi[first];
j=qj[first];
first++;
inou = i+1;
jnou = j;
if (A[inou][jnou] == 0)
if (o[inou][jnou] > 1+ o[i][j])
{
o[inou][jnou] = 1+ o[i][j];
qi[last] = inou;
qj[last] = jnou;
last++;
}
inou = i-1;
jnou = j;
if (A[inou][jnou] == 0)
if (o[inou][jnou] > 1+ o[i][j])
{
o[inou][jnou] = 1+ o[i][j];
qi[last] = inou;
qj[last] = jnou;
last++;
}
inou = i;
jnou = j+1;
if (A[inou][jnou] == 0)
if (o[inou][jnou] > 1+ o[i][j])
{
o[inou][jnou] = 1+ o[i][j];
qi[last] = inou;
qj[last] = jnou;
last++;
}
inou = i;
jnou = j-1;
if (A[inou][jnou] == 0)
if (o[inou][jnou] > 1+ o[i][j])
{
o[inou][jnou] = 1+ o[i][j];
qi[last] = inou;
qj[last] = jnou;
last++;
}
}
fout<<o[xfinal][yfinal];
return 0;
}