Pagini recente » Cod sursa (job #1476743) | Cod sursa (job #3280146) | Monitorul de evaluare | Cod sursa (job #152779) | Cod sursa (job #2631814)
#include <bits/stdc++.h>
#define y1 __y1
using namespace std;
ifstream fin ("kdrum.in");
ofstream fout ("kdrum.out");
struct nod {
int x, y, d;
};
int dl[4] = {0, 0, -1, 1};
int dc[4] = {1, -1, 0, 0};
int n, m, k, dp[52][52][52], nrd[50], f[12002], v[52][52], nr, x1, y1, x2, y2;
int main()
{
fin >> n >> m >> k;
fin >> x1 >> y1 >> x2 >> y2;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
fin >> v[i][j];
for (int i = 1; i <= k; i++) {
if (k % i == 0) {
nrd[++nr] = i;
f[i] = nr;
}
}
queue<nod>q;
q.push({x1, y1, f[__gcd(v[x1][y1], k)]});
dp[x1][y1][f[__gcd(v[x1][y1], k)]] = 1;
while (!q.empty()) {
int x = q.front().x;
int y = q.front().y;
int d = q.front().d;
q.pop();
for (int i = 0; i < 4; i++) {
int xx = x + dl[i];
int yy = y + dc[i];
int poz = f[nrd[d] * __gcd(k / d, v[xx][yy])];
if (v[xx][yy] != 0) {
if (dp[xx][yy][poz] == 0) {
dp[xx][yy][poz] = dp[x][y][d] + 1;
q.push({xx, yy, poz});
}
}
}
}
fout << dp[x2][y2][nr];
return 0;
}