Cod sursa(job #2369472)

Utilizator faggot1234faggot faggot1234 Data 5 martie 2019 23:46:17
Problema Kdrum Scor 50
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.29 kb
#include <bits/stdc++.h>

using namespace std;

struct punct {
    int x, y, d, c;
};

int cmmdc(int a, int b){
    if(b == 0)
        return a;
    return cmmdc(b, a%b);
}

int a[52][52]={0};
bool viz[51][51][12001]={false};

queue<punct> q;

int dx[] = {1, 0, -1, 0};
int dy[] = {0, 1, 0, -1};

int main(){

    int n, m, k, i, j, xi, yi, xf, yf;
    ifstream f("kdrum.in");
    ofstream g("kdrum.out");

    f >> n >> m >> k >> xi >> yi >> xf >> yf;

    //cout << n;// << " " << m << " " << k << " " << yf;
    //printf("%d\n", n);

    for(i=1; i<=n; i++)
        for(j=1; j<=m; j++)
            f >> a[i][j];

    punct p;
    p.x = xi;
    p.y = yi;
    p.c = 1;
    p.d = k/cmmdc(a[xi][yi], k);
    viz[p.x][p.y][p.d] = true;
    q.push(p);


    while(!q.empty()){
        p = q.front();
        q.pop();

        if (p.x == xf && p.y == yf && p.d == 1){
            g << p.c << "\n";
            return 0;
        }

        punct c;
        for(i=0; i<4; i++){
            c.x = p.x+dx[i];
            c.y = p.y+dy[i];

            if(a[c.x][c.y] != 0){

                c.c = p.c + 1;
                c.d = p.d / cmmdc (p.d, a[c.x][c.y]);
                if(!viz[c.x][c.y][c.d]){
                    viz[c.x][c.y][c.d] = true;
                    q.push(c);

                }

            }
        }
    }
}