题目
思路
利用曼哈顿原理求离(x,y)最远的点
代码
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define INF 0x3f3f3f3f
const int maxn=2005;
int gcd(int a,int b) { return b?gcd(b,a%b):a; }
int n,m;
int G[maxn][maxn];
int x,y,k;
int maxd;
vector<int> d[2*maxn];
signed main()
{
cin>>n>>m;
for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) cin>>G[i][j];
cin>>x>>y;
if(G[x][y]==1) { cout<<0;return 0; }
for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) { int dis=abs(i-x)+abs(j-y);maxd=max(maxd,dis),d[dis].push_back(G[i][j]); }
for(int i=0;i<=maxd;i++) { for(int j=0;j<d[i].size();j++) k=gcd(k,d[i][j]); if(k==1) { cout<<i;return 0; } }
cout<<-1;
return 0;
}
end
完结撒花