其实是求助贴,最后一个到底是什么毒瘤测试点,八发老题解思路全被卡100UAC,心已碎,求指点:
#include <bits/stdc++.h>
using namespace std;
#define int long long
int n, m, x, y, ans = 1 << 30, tmp;
int a[3001][3001];
main () {
cin >> n >> m;
for (int i = 1; i <= n; ++i)
for (int j = 1; j <= m; ++j)
cin >> a[i][j];
cin >> x >> y;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
if (i == 1 && j == 1)
tmp = a[i][j];
else
tmp = __gcd(tmp, a[i][j]);
}
}
if (tmp != 1) {
cout << -1;
return 0;
}
if (a[x][y] == 1) {
cout << 0;
return 0;
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
if (i == x && j == y)
continue;
if (abs (x - i) + abs(y - j) >= ans)
continue;
if (__gcd(a[i][j], a[x][y]) == 1)
ans = min (ans, abs (x - i) + abs(y - j));
}
}
cout << ans;
return 0;
}