Cod sursa(job #2652391)

Utilizator minecraft3Vintila Valentin Ioan minecraft3 Data 24 septembrie 2020 20:06:19
Problema Kdrum Scor 60
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.2 kb
#include <bits/stdc++.h>
	
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 dx[]={-1, 0, 0, 1},
          dy[]={0, -1, 1, 0};

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 / __gcd(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 + dx[i]][el.j + dy[i]]) {
                el1 = el;
                el1.i += dx[i];
                el1.j += dy[i];
                el1.stp++;
                el1.k = el.k / __gcd(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;
}