题解:P16343 [科大国创杯初中组 2026] 行走 / ARIS0_0 - 14
小清新题。
考虑到点
考虑从大到小枚举因数,对于每个因数
不难想到使用 BFS 解决。
最大时间复杂度
实在不行可以使用
代码:
#include<bits/stdc++.h>
using namespace std;
int n,v,a[1010][1010],vis[1010][1010];
queue<pair<int,int> >q;
int main(){
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
cin>>n>>v;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cin>>a[i][j];
}
}
for(int i=a[1][1];i>=1;i--){
if(a[1][1]%i==0){
memset(vis,0,sizeof vis);
while(!q.empty()){
q.pop();
}
q.push(make_pair(1,1)),vis[1][1]=1;
while(!q.empty()){
int x=q.front().first,y=q.front().second;
q.pop();
if(x==n&&y==n){
break;
}
if(a[x+1][y]%i==0&&x+1<=n&&y<=n&&!vis[x+1][y]){
q.push(make_pair(x+1,y)),vis[x+1][y]=1;
}
if(a[x][y+1]%i==0&&x<=n&&y+1<=n&&!vis[x][y+1]){
q.push(make_pair(x,y+1)),vis[x][y+1]=1;
}
}
if(vis[n][n]){
cout<<i;
return 0;
}
}
}
return 0;
}
// 以点点繁星,汇日日天明
// 14