求救 过#3#8 其他全RE
查看原帖
求救 过#3#8 其他全RE
549340
qwqasazxzcde楼主2021/11/19 13:19

rt

#include<bits/stdc++.h>
using namespace std;
//洛殿生快!
long long a[205][205],mid1,first,mid0;
int n,m,x,y,step=0;
bool controlRod=true;
bool same;

int gcd(int x,int y)
{
	while(y)
	{
		mid0=x;
		x=y;
		y=mid0%y;
	}
	return x;
	/*if(y==0)
		return x;
	return gcd(y,x%y);*/
}
int gcd(int x,int y,int z,int n,int m)
{
	return gcd(m,gcd(x,gcd(y,gcd(z,n))));
}
int check(int x,int y)
{
	mid1=gcd(a[x][y],a[x+1][y],a[x-1][y],a[x][y+1],a[x][y-1]);
	if(!first)
		first=mid1;
	else
	{
		if(mid1!=first)
			same=false;
	}
	a[x][y]=mid1;
	a[x+1][y]=mid1;
	a[x-1][y]=mid1;
	a[x][y+1]=mid1;
	a[x][y-1]=mid1;
}
int main()
{
	cin>>n>>m;
	for(int k=1;k<=n;k++)
	{
		for(int q=1;q<=m;q++)
		{
			scanf("%lld",&a[k][q]);
		}
	}
	for(int k=1;k<=n;k++)
	{
		a[k][0]=a[k][1];
		a[k][m+1]=a[k][m];
	}
	for(int q=1;q<=m;q++)
	{
		a[0][q]=a[1][q];
		a[n+1][q]=a[n][q];
	}
	cin>>x>>y;
	while(controlRod)
	{
		if(a[x][y]==1)
		{
			cout<<step;
			return 0;
		}
		step++;
		same=true;
		first=0;
		for(int k=1;k<=n&&controlRod;k++)
		{
			for(int q=1;q<=m&&controlRod;q++)
			{
				check(k,q);
				if(a[x][y]==1)
				{
					cout<<step;
					return 0;
				}
			}
		}
		if(same)
		{
			cout<<-1;
			return 0;
		}
	}
}
2021/11/19 13:19
加载中...