小さなクラスY愚かオフへま、彼は紙XとYの2個の乱数を書きました 今、彼はこのプロセスをより面白くするためには、何らかの方法でY Xになることを望んでいるので、彼は唯一の2つの動作モードを使用して自分自身を制限しました:
図1に示すように、現在のX×2
2、現在のX保存
そのため、教室での限られた時間で、彼はこのプロセスを達成するための操作の最小数を使用していました。クラスの後、QZ XとY Y言う紙の小片を参照渡して、彼は操作の数と第2小Yの中に知ることができます。そこで問題は、どのように多くの時間、それは動作しません最後に小さなYと、ありますか?
エントリー
2つの数XとYは、 1 <= X <=10億 。1 <= Y <=10億
輸出
XがYとなる数は操作の最小数を必要とします
サンプル入力
1 1000000000
サンプル出力
図39は、
次いで、YがXになるだけの2つの動作のモードを検討:1.Y / = 2 2.y + = 1;
yは、その後だけ第二実行奇数である場合、Y + = 1偶数となる
yが偶数である場合、次いで直接に加えて、Y / 2にそれを考慮し、それは、Y / 2 + 1になった場合、第一の加算に結合され、ステップ2の動作を、そうでない場合、次に2/2の追加の動作をステップ3;
そう偶数のための、より良い一緒に加え、
その後、溶液全体が出てきた:(XY)ができることがあり、X <Yの場合には、オン/ 2の偶数プラス。
#include <cstdioを> する#include <CStringの> する#include <アルゴリズム> の#include <cstdlib> の#include <地図> の#include <iostreamの> する#include <CStringの> する#include <ストリング> 名前空間STDを使用して、 const int型MAXN = 2010; typedefの長い長いLL。 #define rdint(X)のscanf( "%dの"、およびX) の#define INF 0x3f3f3f3f INT X、Y。 INTメイン() { rdint(X)。rdint(Y)。 int型ミネソタ州= infファイル。 int型CNT = 0; 一方、(1){ IF(X == y)のブレーク。 もし(Y%2 == 0 && Y> X){ CNT ++。Y / 2 =。 } そうであれば(Y> X &&のy%2 == 1){ CNT ++。Y + = 1; CNT + =(x - y)は、 Y = Xの; ブレーク; } } COUT << CNT << ENDL。 システム(「一時停止」)。 //は0を返します。 }