P7243 最大公约数

题目

P7243 最大公约数_第1张图片

思路

利用曼哈顿原理求离(x,y)最远的点

代码

#include
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

完结撒花

你可能感兴趣的:(算法,深度优先,c++,广度优先)