Mistrzostwa Polski Szkół Średnich w Programowaniu Zespołowym 2024
Problem description
Jasio ma patyczek długości 2N. Chciałby uzyskać patyczek długości K.
Może w tym celu wykonywać następujące operacje:
- podzielić patyczek na dwie równe części (o ile wybrany patyczek jest parzystej długości),
- skleić dwa patyczki w jeden (o długości będącej sumą długości sklejanych patyczków).
Napisz program, który: wczyta wartości N oraz K, wyznaczy minimalną liczbę operacji, które należy wykonać, żeby uzyskać patyczek długości K z patyczka długości 2N i wypisze wynik na standardowe wyjście.
Wejście
W pierwszym (jedynym) wierszu wejścia znajdują się dwie nieujemne liczby całkowite: N oraz K, oddzielone pojedynczym odstępem.
Wyjście
W pierwszym (jedynym) wierszu wyjścia należy wypisać jedną liczbę całkowitą – minimalną liczbę operacji niezbędnych do uzyskania patyczka długości K z patyczka długości 2N.
Ograniczenia
0 ≤ N ≤ 60, 1 ≤ K ≤ min (2N,1018).
Przykład
Input | Output | Explanation |
|
|
Patyczek Jasia ma długość 23 = 8. Najpierw Jasio dzieli patyczek długości 8 na dwa patyczki długości 4. Potem dzieli jeden z uzyskanych patyczków na dwa o długości 2. Potem dzieli jeden z uzyskanych patyczków długości 2 na dwa patyczki długości 1. Na końcu wystarczy skleić patyczek długości 2 z patyczkiem długości 1. |