题解
我们直接求 到各点的最短路,取最大值即可。
代码
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,k,a[100001],vis[100001];
queue<int>q;
signed main(){
cin>>n>>k;
vis[0]=1;
q.push(0);
int ans=0;
while(!q.empty()){
int cur=q.front();
q.pop();
ans=max(ans,a[cur]);
int nxt=(cur+1)%n;
if(!vis[nxt]){
a[nxt]=a[cur]+1;
vis[nxt]=1;
q.push(nxt);
}
nxt=(cur+k)%n;
if(!vis[nxt]){
a[nxt]=a[cur]+1;
vis[nxt]=1;
q.push(nxt);
}
}
cout<<ans<<endl;
return 0;
}