Nhân 2 trừ 1

Xem PDF



Tác giả:
Dạng bài
Ngôn ngữ cho phép
Assembly, Awk, C, C#, C++, Clang, Cobol, D, Groovy, Haskell, JS, Java, Kotlin, Lua, Node JS, OCaml, ObjectiveC, Output, PHP, Pascal, Perl, Prolog, Pypy, Pypy 3, Python, Ruby, Rust, Scala, Scratch, Swift
Điểm: 1200 Thời gian: 1.0s Bộ nhớ: 256M Input: bàn phím Output: màn hình

Cho \(q\) (\(q \leq 10^5\)) truy vấn, mỗi truy vấn cho hai số nguyên dương \(x, y\). Tìm số thao tác ít nhất để biến đổi \(x\) thành \(y\), biết rằng mỗi thao tác được thực hiện một trong hai hành động sau:

  • Phép nhân 2: \(x \gets x \times 2\).
  • Phép trừ 1 (chỉ thực hiện được khi \(x > 1\)): \(x \gets x - 1\).

Input

  • Dòng đầu tiên gồm một số nguyên dương \(q\) là số truy vấn.
  • \(q\) dòng tiếp theo, dòng thứ \(i\) (\(1 \leq i \leq q\)) gồm hai số nguyên dương \(x_i, y_i\) (\(x_i, y_i \leq 10^9\)) thể hiện một truy vấn tìm số thao tác ít nhất để biến đổi từ \(x_i\) thành \(y_i\).

Output

  • Gồm \(q\) dòng, mỗi dòng gồm một số nguyên duy nhất là kết quả của một truy vấn. Các kết quả phải được in theo thứ tự với các truy vấn trong dữ liệu đầu vào.

Example

Test 1

Input
3
1 4
2 5
6 5
Output
2
4
1
Note

Cách biến đổi tối ưu của mỗi truy vấn:

  • \(1 \rightarrow 2 \rightarrow 4\).
  • \(2 \rightarrow 4 \rightarrow 3 \rightarrow 6 \rightarrow 5\).
  • \(6 \rightarrow 5\).

Scoring

  • Subtask \(1\) (\(20\%\) số điểm): \(q \leq 1000\)\(1 \leq x_i, y_i \leq 1000\).
  • Subtask \(2\) (\(20\%\) số điểm): Tồn tại một cách tối ưu để biến đổi mà chỉ sử dụng phép nhân 2 nhiều nhất một lần.
  • Subtask \(3\) (\(30\%\) số điểm): Tồn tại một cách tối ưu để biến đổi mà chỉ sử dụng phép trừ 1 nhiều nhất một lần.
  • Subtask \(4\) (\(30\%\) số điểm): Không có ràng buộc gì thêm.

Bình luận

Mới nhất
Tải bình luận...

Không có bình luận nào.

Kỳ thi: