Cod sursa(job #2108465)

Utilizator KOzarmOvidiu Badea KOzarm Data 18 ianuarie 2018 13:09:36
Problema Kdrum Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.24 kb
#include <fstream>
#include <deque>
using namespace std;

ifstream fin("kdrum.in");
ofstream fout("kdrum.out");

struct elem
{
    int k,i,j,stp;
}in,fi,el,el1;


deque <elem> d;

int n,m,k,a[12001][51][51];
const int di[]={-1,0,0,1},dj[]={0,-1,1,0};

int cmmdc(int a,int b)
{
    while(b!=0)
    {
        int c=a%b;
        a=b;
        b=c;
    }
    return a;
}



int main()
{
    fin>>n>>m>>k;
    fin>>in.i>>in.j>>fi.i>>fi.j;
    for(int i=1;i<=n;i++)
    for(int j=1;j<=m;j++)
        fin>>a[0][i][j];
    in.stp=1;
    in.k=k/cmmdc(a[0][in.i][in.j],k);
    d.push_back(in);
    while(!d.empty())
    {
        el=d.front();
        d.pop_front();
        for(int i=0;i<4;i++)
        {
            if(a[0][el.i+di[i]][el.j+dj[i]]!=0)
            {
                el1=el;
                el1.i+=di[i];
                el1.j+=dj[i];
                el1.stp++;
                el1.k=el.k/cmmdc(el.k,a[0][el1.i][el1.j]);
                if(a[el1.k][el1.i][el1.j]==0||a[el1.k][el1.i][el1.j]>el1.stp)
                {
                    a[el1.k][el1.i][el1.j]=el1.stp;
                    d.push_back(el1);
                }
            }
        }
    }
    fout<<a[1][fi.i][fi.j];
    return 0;
}