菜的很的我又被踩了 耻辱#6

T1 meet

题目大意:

数轴上两个点x y 可以左移 右移1单位 或坐标*2 求最少步数

思路:

sb题 bfs就完事了

(我更sb 开始想错了以为有负数开小了空间)

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<cstdlib>
 5 #include<cmath>
 6 #include<algorithm>
 7 #include<queue>
 8 #include<vector>
 9 #include<map>
10 #define inf 2139062143
11 #define ll long long
12 #define MAXN 300100
13 using namespace std;
14 inline int read()
15 {
16     int x=0,f=1;char ch=getchar();
17     while(!isdigit(ch)) {if(ch=='-')f=-1;ch=getchar();}
18     while(isdigit(ch)) {x=x*10+ch-'0';ch=getchar();}
19     return x*f;
20 }
21 //yyc score=0
22 int n,k,q[MAXN<<3],l,r,vis[(MAXN<<1)+100];
23 int main()
24 {
25     freopen("meet.in","r",stdin);
26     freopen("meet.out","w",stdout);
27     n=read(),k=read();q[l=r=1]=n,vis[n]=1;int x;
28     if(n>=k) return printf("%d\n",n-k)&0;
29     while(l<=r)
30     {
31         x=q[l++];
32         if(x==k) break;
33         if(!vis[x+1]) vis[x+1]=vis[x]+1,q[++r]=x+1;
34         if(!vis[x-1]&&x-1>=0) vis[x-1]=vis[x]+1,q[++r]=x-1;
35         if(!vis[x*2]&&x*2<=4*k) vis[x*2]=vis[x]+1,q[++r]=x<<1;
36     }
37     printf("%d\n",vis[k]-1);
38 }
View Code

相关文章:

  • 2021-04-18
  • 2021-07-06
  • 2021-12-28
  • 2021-12-15
  • 2021-06-15
  • 2021-04-02
  • 2021-08-12
  • 2021-12-25
猜你喜欢
  • 2021-08-16
  • 2022-03-06
  • 2021-08-19
  • 2021-10-19
  • 2021-05-29
  • 2022-12-23
相关资源
相似解决方案