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 }
posted @ 2011-03-08 01:31  AC2012  阅读(264)  评论(0编辑  收藏  举报