Cod sursa(job #2110058)

Utilizator 3DwArDPauliuc Edward 3DwArD Data 20 ianuarie 2018 12:14:01
Problema Kdrum Scor 0
Compilator cpp Status done
Runda evaluare_cex_sv_cls_x_2 Marime 1.66 kb
#include <bits/stdc++.h>
using namespace std;
ifstream f("kdrum.in");
ofstream g("kdrum.out");
int n,m,k,xi,yi,xf,yf;
int a[52][52];
bool b[52][52];
int diri[]={-1,0,1,0};
int dirj[]={0,1,0,-1};
int ver(int i,int j){
    return (i>0&&i<=n&&j>0&&j<=m&&b[i][j]==0);
}
int cmmdc(int a,int b){
    if(b==0)return a;
    return cmmdc(b,a%b);
}
int lee(){
    deque<int> di,dj,dval,dist;
    di.push_back(xi);
    dj.push_back(yi);
    dval.push_back(1);
    dist.push_back(1);
    b[xi][yi]=1;
    while(!di.empty()){
        int ii=di.front();
        int jj=dj.front();
        int vv=dval.front();
        int dd=dist.front();
        b[ii][jj]=1;
        if(ii==xf&&jj==yf&&vv==k)return dd;
        di.pop_front();
        dj.pop_front();
        dval.pop_front();
        dist.pop_front();
        for(int dir=0;dir<=3;dir++){
            int ni=ii+diri[dir],nj=jj+dirj[dir];
            if(ver(ni,nj)){if(cmmdc((k/vv),a[ni][nj])>1){
                di.push_front(ni);
                dj.push_front(nj);
                dval.push_front(vv*cmmdc(k/vv,a[ni][nj]));
                dist.push_back(dd+1);
            }else
            {
                di.push_back(ni);
                dj.push_back(nj);
                dval.push_back(vv);
                dist.push_back(dd+1);
            }
            }

        }

    }
}
void citire(){
    f>>n>>m>>k>>xi>>yi>>xf>>yf;
    for(int i=1;i<=n;i++)for(int j=1;j<=m;j++){
            int x;
            f>>x;
            if(x==0)a[i][j]=-1;
            else {
                    a[i][j]=cmmdc(k,x);
            }
    }
}
int main(){
    citire();
    g<<lee()+1;
    return 0;
}