看一下宽搜的定义,是不是与题意有一些雷同之处?
这道题的题意已经很明显的指出:bfs。
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int maxn=1e5+20;
int vis[maxn];
int dis[maxn];
queue<int>q;
int n,k;
int ans=0;
///bfs算法需要将所有的点先后入列,
///vis数组的作用就是确保所有的点都入过列,且不会重复入列
void bfs()
{
vis[0]=1;
q.push(0);
while(!q.empty())
{
int now=q.front();
ans=max(ans,dis[now]);
q.pop();
int nex=(now+1)%n;
if(vis[nex]==0)
{
vis[nex]=1;
dis[nex]=dis[now]+1;
q.push(nex);
}
nex=(now+k)%n;
if(vis[nex]==0)
{
dis[nex]=dis[now]+1;
vis[nex]=1;
q.push(nex);
}
}
}
int main()
{
scanf("%d%d",&n,&k);
memset(vis,0,sizeof(vis));
memset(dis,0,sizeof(dis));
bfs();
cout<<ans<<endl;
return 0;
}