Cod sursa(job #3328280)

Utilizator DavidPopPopescu David DavidPop Data 7 decembrie 2025 15:59:11
Problema Kdrum Scor 50
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin("kdrum.in");
ofstream fout("kdrum.out");
short x[52][52],di[]= {-1,0,0,1},dj[]= {0,-1,1,0};
short M[52][52][12001];
queue<int> qi,qj,qv;
int n,m,k,a,b,c,d,ok,v1;
int main()
{
    fin>>n>>m>>k>>a>>b>>c>>d;
    for(int i=1; i<=n; i++)
        for(int j=1; j<=m; j++)
        {
            fin>>x[i][j];
        }
    qi.push(a);
    qj.push(b);
    qv.push(x[a][b]);
    M[a][b][x[a][b]] = 1;
    while(!qi.empty()&&!ok)
    {
        int i = qi.front();
        qi.pop();
        int j = qj.front();
        qj.pop();
        int v = qv.front();
        qv.pop();
        for(int g=0; g<4; g++)
        {
            int iv=i+di[g],jv=j+dj[g];
            if(iv>0&&jv>0&&iv<=n&&jv<=m&&x[iv][jv]!=0)
            {
                v1 = __gcd(k, v * x[iv][jv]);
                if(M[iv][jv][v1]==0)
                {
                    M[iv][jv][v1]=M[i][j][v] + 1;
                    if(iv==c && jv==d && v1==k)ok=1;
                    qi.push(iv);
                    qj.push(jv);
                    qv.push(v1);
                }
            }
        }
    }
    fout<<M[c][d][k];
    return 0;
}