3278

 
  
1 // include file
2 #include < cstdio >
3 #include < cstdlib >
4 #include < cstring >
5 #include < cmath >
6 #include < cctype >
7 #include < ctime >
8
9 #include < iostream >
10 #include < sstream >
11 #include < fstream >
12 #include < iomanip >
13 #include < bitset >
14 #include < strstream >
15
16 #include < algorithm >
17 #include < string >
18 #include < vector >
19 #include < queue >
20 #include < set >
21 #include < list >
22 #include < functional >
23
24 using namespace std;
25
26 // typedef
27 typedef long long LL;
28 typedef unsigned long long ULL;
29
30 //
31 #define read freopen("in.txt","r",stdin)
32 #define write freopen("out.txt","w",stdout)
33 #define FORi(a,b,c) for(int i=(a);i<(b);i+=c)
34 #define FORj(a,b,c) for(int j=(a);j<(b);j+=c)
35 #define FORk(a,b,c) for(int k=(a);k<(b);k+=c)
36 #define FORp(a,b,c) for(int p=(a);p<(b);p+=c)
37 #define FORii(a,b,c) for(int ii=(a);ii<(b);ii+=c)
38 #define FORjj(a,b,c) for(int jj=(a);jj<(b);jj+=c)
39 #define FORkk(a,b,c) for(int kk=(a);kk<(b);kk+=c)
40
41 #define FF(i,a) for(int i=0;i<(a);i+++)
42 #define FFD(i,a) for(int i=(a)-1;i>=0;i--)
43 #define Z(a) (a<<1)
44 #define Y(a) (a>>1)
45
46 const double eps = 1e - 6 ;
47 const double INFf = 1e10;
48 const int INFi = 1000000000 ;
49 const double Pi = acos( - 1.0 );
50
51 template < class T > inline T sqr(T a){ return a * a;}
52 template < class T > inline T TMAX(T x,T y)
53 {
54 if (x > y) return x;
55 return y;
56 }
57 template < class T > inline T TMIN(T x,T y)
58 {
59 if (x < y) return x;
60 return y;
61 }
62 template < class T > inline void SWAP(T & x,T & y)
63 {
64 T t = x;
65 x = y;
66 y = t;
67 }
68 template < class T > inline T MMAX(T x,T y,T z)
69 {
70 return TMAX(TMAX(x,y),z);
71 }
72
73
74 // code begin
75 int N,K;
76 struct node
77 {
78 int tm;
79 int lo;
80 };
81 queue < node > qi;
82 bool used[ 100001 ];
83 int main()
84 {
85 read;
86 write;
87 while (scanf( " %d %d " , & N, & K) !=- 1 )
88 {
89 if (N == K)
90 {
91 printf( " 0\n " );
92 continue ;
93 }
94 while ( ! qi.empty()) qi.pop();
95 node f;
96 f.lo = N;
97 f.tm = 0 ;
98 qi.push(f);
99 memset(used, 0 , sizeof (used));
100 used[N] = 1 ;
101 while ( ! qi.empty())
102 {
103 node cu = qi.front();
104 qi.pop();
105
106 node t;
107 if (cu.lo - 1 == K)
108 {
109 printf( " %d\n " ,cu.tm + 1 );
110 break ;
111 }
112 else
113 {
114 t.lo = cu.lo - 1 ;
115 t.tm = cu.tm + 1 ;
116 if (t.lo >= 0 && ! used[t.lo])
117 {
118 used[t.lo] = 1 ;
119 qi.push(t);
120 }
121 }
122 if (cu.lo + 1 == K)
123 {
124 printf( " %d\n " ,cu.tm + 1 );
125 break ;
126 }
127 else
128 {
129 t.lo = cu.lo + 1 ;
130 t.tm = cu.tm + 1 ;
131 if (t.lo <= 100000 && ! used[t.lo])
132 {
133 used[t.lo] = 1 ;
134 qi.push(t);
135 }
136 }
137 if (cu.lo * 2 == K)
138 {
139 printf( " %d\n " ,cu.tm + 1 );
140 break ;
141 }
142 else
143 {
144 t.lo = cu.lo * 2 ;
145 t.tm = cu.tm + 1 ;
146 if (t.lo <= 100000 && ! used[t.lo])
147 {
148 used[t.lo] = 1 ;
149 qi.push(t);
150 }
151 }
152 }
153 }
154 return 0 ;
155 }

转载于:https://www.cnblogs.com/ac2012/archive/2011/03/08/1976753.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值