调手表
链接:
https://www.lanqiao.cn/problems/230/learning/
来源:
蓝桥云课
思路:
bfs题,从0点入队列,判断u+1和u+k点是否已到达过,如果没有加一步,取最大步数
#include <bits/stdc++.h>
using namespace std;
queue<int> q;
int bk[1000500];
int ans;
int main()
{
int n , k;
cin >> n >> k;
q.push(0);
while(q.size()){
int u = q.front();//先取队头
q.pop();
int x=(u+1),y =(u+k);//+1或加k
if(x>n)x=x%n;//取模
if(y>n)y=y%n;
if(bk[x]==0){//判断是否已经有最短路经了
q.push(x);//入对列
bk[x]=bk[u]+1;//加一步
}
if(bk[y]==0){
q.push(y);
bk[y]=bk[u]+1;
}
}
for(int i = 0 ;i < n ;i++)
ans = max(ans,bk[i]);//输出最大步数
cout << ans;
return 0;
}