12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- #include <cstdio>
- #include <cstring>
- #include <queue>
- using namespace std;
- const int L = 200001;
- bool set[L];
- int main() {
- int N, K;
- while (scanf("%d %d", &N, &K) != EOF) {
- queue<int> q;
- q.push(N);
- memset(set, 0, sizeof(set));
- set[N] = true;
- int s = 1, t = 0;
- while (s != 0) {
- int n = q.front();
- q.pop();
- s--;
- if (n == K) break;
- if (n < K) {
- if (!set[2 * n]) {
- q.push(2 * n);
- set[2 * n] = true;
- }
- if (!set[n + 1]) {
- q.push(n + 1);
- set[n + 1] = true;
- }
- }
- if (0 < n && !set[n - 1]) {
- q.push(n - 1);
- set[n - 1] = true;
- }
- if (s == 0) {
- s = q.size();
- t++;
- }
- }
- printf("%d\n", t);
- }
- return 0;
- }
|