trang chủ / đề bài / bacsplit

Vi khuẩn phân đôi

Đề bài

Mô tả

Ban đầu, vào ngày 1, có đúng một vi khuẩn với khối lượng 1.

Mỗi ngày, một số vi khuẩn bất kỳ (có thể không có con nào, cũng có thể tất cả) sẽ phân đôi. Khi một vi khuẩn khối lượng m phân đôi, nó trở thành hai vi khuẩn, mỗi con có khối lượng m/2. Việc phân đôi không làm thay đổi tổng khối lượng.

Mỗi đêm, khối lượng của mọi vi khuẩn đang sống đều tăng thêm 1.

Cho số nguyên n. Hãy kiểm tra xem có thể làm cho tổng khối lượng của tất cả vi khuẩn đúng bằng n hay không. Nếu được, hãy chỉ ra cách đạt được tổng khối lượng đó với số đêm ít nhất.

Dữ liệu vào

Dòng đầu chứa số nguyên t (1≤t≤1000) là số bộ dữ liệu.

Mỗi bộ dữ liệu gồm một dòng chứa số nguyên n (2≤n≤109) là tổng khối lượng cần đạt được.

Dữ liệu ra

Với mỗi bộ dữ liệu:

  • Nếu không có cách nào đạt được tổng khối lượng n, in ra −1.
  • Ngược lại, in ra hai dòng. Dòng thứ nhất chứa số nguyên d là số đêm ít nhất cần dùng. Dòng thứ hai chứa d số nguyên, số thứ i là số vi khuẩn phân đôi trong ngày thứ i.

Nếu có nhiều đáp án cùng dùng d đêm, in ra đáp án bất kỳ.

Ràng buộc

  • 1≤t≤1000
  • 2≤n≤109

Ví dụ

Input Output Giải thích
3
9
11
2
3
1 0 2
3
1 1 2
1
0
Với n=9: ngày 1 con duy nhất phân đôi thành hai con khối lượng 0.5; đêm 1 chúng thành 1.5 (tổng 3). Ngày 2 không con nào phân đôi; đêm 2 chúng thành 2.5 (tổng 5). Ngày 3 cả hai phân đôi thành bốn con khối lượng 1.25; đêm 3 chúng thành 2.25, tổng 4×2.25=9. Với n=2: không phân đôi, sau đêm 1 con duy nhất có khối lượng 2.
1
4
2
0 1
Ngày 1 không phân đôi, đêm 1 con duy nhất đạt khối lượng 2. Ngày 2 nó phân đôi thành hai con khối lượng 1; đêm 2 mỗi con thành 2, tổng bằng 4. Không thể đạt 4 chỉ với 1 đêm vì khi đó tổng khối lượng nhiều nhất là 3.

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