trang chủ / đề bài / binreach

Đảo ngược nhị phân đạt được

Đề bài

Mô tả

Cho hai số nguyên dương x và y. Bạn có thể thực hiện thao tác sau với x bao nhiêu lần tùy ý (kể cả không lần nào):

  • Viết x ở dạng nhị phân (không có chữ số 0 vô nghĩa ở đầu).
  • Thêm một chữ số 0 hoặc 1 vào bên phải chuỗi nhị phân đó.
  • Đảo ngược chuỗi vừa thu được, rồi bỏ các chữ số 0 vô nghĩa ở đầu.
  • Giá trị thập phân của chuỗi kết quả trở thành giá trị mới của x.

Ví dụ, 34 có dạng nhị phân là 100010. Nếu thêm 1 vào bên phải ta được 1000101, đảo ngược thành 1010001, tức là 81. Nếu thêm 0 ta được 1000100, đảo ngược thành 0010001, bỏ chữ số 0 ở đầu còn 10001, tức là 17.

Hãy xác định xem có thể biến x thành y sau một số thao tác hay không.

Dữ liệu vào

Một dòng duy nhất chứa hai số nguyên x và y.

Dữ liệu ra

In ra YES nếu có thể biến x thành y, ngược lại in ra NO.

Ràng buộc

  • 1≤x,y≤1018

Ví dụ

Input Output Giải thích
3 3 YES Không cần thao tác nào, x đã bằng y.
7 4 NO Không có cách nào biến 7 thành 4.
2 8 NO Không có cách nào biến 2 thành 8.
34 69 YES 34→81→69: trước tiên biến 34 thành 81, rồi biến 81 thành 69.

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.47 awk 1.3.4 gcc 16.2.0 dotnet 10.0.402 g++ 16.2.0 g++-themis 16.2.0 g++17 16.2.0 g++20 16.2.0 g++23 16.2.0 clang++ 22.1.8 dmd 2.113.0 dart 3.13.6 gforth 0.7.3 gfortran 15.3.0 go 1.27.3 groovyc 5.1.3 javac 26.0.2.1 node 26.12.1 julia 1.13.2 kotlinc 2.4.21 lean 4.35.0 sbcl 2.2.9 lua 5.5.1 nim 2.2.12 fpc 3.2.2 fpc-themis 3.2.2 perl 5.42.3 php 8.5.12 pike 8.0 swipl 9.0.4 pypy3 7.3.23 python3 3.15.1 racket 8.7 ruby 4.0.8 rustc 1.99.1 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 swiftc 6.4.1 tclsh 8.6 bun 1.4.4 deno 2.9.8 v 0.5.2 zig 0.17.0