lanqiao OJ 230 调手表

简介: lanqiao OJ 230 调手表

1.调手表 - 蓝桥云课 (lanqiao.cn)

这个题是bfs的应用,我们平常bfs就上下左右四个方向走,这个就是要么+1要么+k,这两个选择,当v[i]全部被记录过的时候,我们的队列就会为空,然后就会退出bfs,这样我们就可以的到从一个数其他所有的数的调整个数,取这个调整个数的数组的最大值就是我们要找的最大值。

#include<iostream>
#include<cstring>
#include<algorithm>
#include<queue>
 
using namespace std ;
const int N = 1e5+10 ;
queue<int> q ;
int n , k ;
int ans ;
int cnt ;
int d[2] ;
bool v[N] ;
int dis[N] ;//走到每个数的调整个数
void bfs(){
  q.push(0) ;
  while(!q.empty()){
    int now = q.front() ;
    q.pop() ;
    for(int i = 0 ; i < 2 ; i ++){//遍历这两个方向
      int tx = (now + d[i]) % n ;
      if(!v[tx]){
        v[tx] = 1 ;
        dis[tx] = dis[now] + 1 ;
        q.push(tx) ;
      }
    }
  }
  
}
int main(){
  cin >> n >> k ;
  d[0] = 1 ; d[1] = k ;
  memset(v,0,sizeof(v)) ;
  v[0] = 1 ;//第一个数走过了,不用调
  bfs() ;
  
  for(int i = 0 ; i < n ; i ++) ans = max(ans,dis[i]) ;//找这个数组的最大值
  cout << ans << endl ;
  return 0 ;
}
目录
相关文章
|
3天前
lanqiao OJ 1447 砝码称重
lanqiao OJ 1447 砝码称重
12 1
|
3天前
lanqiao OJ 1505 剪邮票
lanqiao OJ 1505 剪邮票
10 0
|
3天前
lanqiao OJ 525 传球游戏
lanqiao OJ 525 传球游戏
11 2
|
3天前
lanqiao OJ 99 分巧克力
lanqiao OJ 99 分巧克力
8 1
|
2天前
lanqiao OJ 2097 青蛙过河
lanqiao OJ 2097 青蛙过河
6 0
|
3天前
|
机器人
lanqiao OJ 118 机器人塔
lanqiao OJ 118 机器人塔
6 0
|
1天前
lanqiao OJ 健身
lanqiao OJ 健身
5 0
|
2天前
|
BI
lanqiao OJ 蜗牛
lanqiao OJ 蜗牛
7 0
|
1天前
lanqiao oj 186 糖果(状态压缩dp)
lanqiao oj 186 糖果(状态压缩dp)
5 0
|
2天前
|
机器人
lanqiao OJ 199 扫地机器人
lanqiao OJ 199 扫地机器人
6 0