trang chủ / bài tập / johnnycpu

Máy tính cổ của Johnny

Đề bài

Mô tả

Johnny tìm thấy một chiếc máy tính cổ chỉ có duy nhất một thanh ghi chứa một số nguyên dương x. Trong một thao tác, máy có thể dịch các bit của x sang trái hoặc sang phải tối đa ba vị trí. Nói cách khác, mỗi thao tác thay x bằng một trong các giá trị:

  • x·2, x·4, x·8
  • x/2 (nếu x chia hết cho 2), x/4 (nếu x chia hết cho 4), x/8 (nếu x chia hết cho 8)

Phép chia chỉ được phép khi x chia hết cho số chia tương ứng (dịch phải không được làm mất bit 1 nào).

Cho hai số ab. Hãy tìm số thao tác ít nhất để biến a thành b. Nếu không thể, in ra 1.

Dữ liệu vào

  • Dòng đầu chứa số nguyên t: số lượng bộ dữ liệu.
  • Mỗi dòng trong t dòng tiếp theo chứa hai số nguyên ab.

Dữ liệu ra

In ra t dòng, mỗi dòng là số thao tác ít nhất tương ứng, hoặc 1 nếu không thể.

Ràng buộc

  • 1t1000
  • 1a,b1018

Ví dụ

Input Output Giải thích
5
10 5
11 44
17 21
1 1
96 3
1
1
-1
0
2
105: chia 2. 1144: nhân 4. 1721 có phần lẻ khác nhau nên không thể. 1=1 nên cần 0 thao tác. 963: chia 4 rồi chia 8.
3
2 128
7 1
10 8
2
-1
-1
2128: nhân 8 rồi nhân 8 (216128). 71 có phần lẻ khác nhau. 108 có phần lẻ khác nhau (51).

Bình luận

Không có bình luận tại thời điểm này.

gnatmake 12.2.0 a68g 3.1.2 nasm 2.16.1 as_x64 2.46 awk 1.3.4 gcc 16.1.0 csc 6.12.0.200 g++ 16.1.0 g++-themis 16.1.0 g++17 16.1.0 g++20 16.1.0 g++23 16.1.0 clang++ 22.1.6 dmd 2.112.0 dart 3.12.1 gforth 0.7.3 gfortran 12.2.0 go 1.26.3 groovyc 5.0.6 javac 25.0.3 node 26.2.0 kotlinc 2.3.21 sbcl 2.2.9 lua 5.4.8 nim 2.2.10 fpc 3.2.2 fpc-themis 3.2.2 perl 5.36.0 php 8.5.6 pike 8.0 pypy3 7.3.23 python3 3.14.5 racket 8.7 ruby 4.0.5 rustc 1.96.0 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 tclsh 8.6 bun 1.3.14 deno 2.8.1 v 0.5.1 zig 0.16.0