Pagini recente » Cod sursa (job #825717) | Cod sursa (job #2510928) | Cod sursa (job #88136) | Cod sursa (job #1110692) | Cod sursa (job #2534800)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("kdrum.in");
ofstream fout("kdrum.out");
struct Cel {int i, j, v;};
const int di[] = {0, 0, 1, -1};
const int dj[] = {1, -1, 0, 0};
#define iv (di[d] + i)
#define jv (dj[d] + j)
const int Inf = 0x3f3f3f3f;
const int N = 55, M = 55, V = 155, K = 12005;
int dp[N][M][V], a[N][M], dv[K];
int n, m, k, ip, jp, is, js;
inline bool Ok(const int& i, const int& j);
int gcd(int a, int b);
void Setup();
void Lee();
int main()
{
Setup();
Lee();
fout << dp[is][js][dv[k]];
fout.close();
}
void Lee()
{
queue<Cel> Q;
Q.push({ip, jp, gcd(a[ip][jp], k)});
dp[ip][jp][dv[gcd(a[ip][jp], k)]] = 1;
int i, j, v;
while (!Q.empty())
{
i = Q.front().i;
j = Q.front().j;
v = Q.front().v;
Q.pop();
for (int d = 0; d < 4; ++d)
if (Ok(iv, jv))
{
int newg = v * a[iv][jv];
newg = gcd(k, newg);
if (dp[iv][jv][dv[newg]] > dp[i][j][dv[v]] + 1)
{
dp[iv][jv][dv[newg]] = dp[i][j][dv[v]] + 1;
Q.push({iv, jv, newg});
}
}
}
}
void Setup()
{
ios_base::sync_with_stdio(false);
fin.tie(0);
fout.tie(0);
for (int i = 0; i < N; ++i)
for (int j = 0; j < M; ++j)
for (int v = 0; v < V; ++v)
dp[i][j][v] = Inf;
fin >> n >> m >> k;
fin >> ip >> jp >> is >> js;
for (int i = 1; i <= n; ++i)
for (int j = 1; j <= m; ++j)
fin >> a[i][j];
int curr = 0;
for (int i = 1; i <= k; ++i)
if (k % i == 0) dv[i] = ++curr;
fin.close();
}
int gcd(int a, int b)
{
int c;
while (b) {
c = a % b;
a = b;
b = c;
}
return a;
}
inline bool Ok(const int& i, const int& j)
{ return (i > 0 && j > 0 && i <= n && j <= m && a[i][j]); }