Cod sursa(job #465433)

Utilizator zloteanu.adrianzloteanu adrian nichita zloteanu.adrian Data 24 iunie 2010 11:35:14
Problema Kdrum Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
# include <fstream.h>
int Ma[55][55][150],l,c,p,u,i,j,d,k,D[150],ap[12001],dx[4]={1, 0, -1, 0},N,M,K,x1,y1,x2,dy[4]={0, 1, 0, -1},y2,x,a[55][55];
struct elem{int x,y,d;} C[55*55*150],X;
int cmmdc(int a, int b)
{int r;
do
  {r=a%b;
  a=b;b=r;}
while(r!=0);
return a;}
int main()
{ifstream q("kdrum.in");
ofstream w("kdrum.out");
q>>N>>M>>K>>x1>>y1>>x2>>y2;
for(i=1;i<=N;i++)
  for(j=1;j<=M;j++)
    q>>a[i][j];
for(d=1,k=0;d<=K;d++)
  {if(K%d==0)
    {D[++k]=d;
    ap[d]=k;}}
p=u=1;
C[p].x=x1;
C[p].y=y1;
d=cmmdc(a[x1][y1],K);
C[p].d=ap[K/d];
Ma[x1][y1][ap[K/d]]=1;
while(p<=u)
   {X=C[p];
   for(i=0;i<4;i++)
     {l=X.x+dx[i];
     c=X.y+dy[i];
     if(l>=1&&l<=N&&c>=1&&c<=M&&a[l][c])
	  {d=D[X.d]/cmmdc(a[l][c],D[X.d]);
	  if(Ma[l][c][ap[d]]>Ma[X.x][X.y][X.d]+1||Ma[l][c][ap[d]]==0)
	   {Ma[l][c][ap[d]]=Ma[X.x][X.y][X.d]+1;
	   u++;
	   C[u].x=l;
	   C[u].y=c;
	   C[u].d=ap[d];}}}
   p++;}
w<<Ma[x2][y2][ap[1]];
return 0;}