Cod sursa(job #2425044)

Utilizator robert.barbu27robert barbu robert.barbu27 Data 24 mai 2019 10:14:25
Problema Kdrum Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.49 kb
#include <iostream>
#include <fstream>
#include <cmath>

using namespace std;
ifstream f("kdrum.in");
ofstream g("kdrum.out");
int c[900500][3];
int 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]];
}