Vi khuẩn phân đôi
Đề bài
Mô tả
Ban đầu, vào ngày , có đúng một vi khuẩn với khối lượng .
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 phân đôi, nó trở thành hai vi khuẩn, mỗi con có khối lượng . 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 .
Cho số nguyê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 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 là số bộ dữ liệu.
Mỗi bộ dữ liệu gồm một dòng chứa số nguyên 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 , in ra .
- Ngược lại, in ra hai dòng. Dòng thứ nhất chứa số nguyên là số đêm ít nhất cần dùng. Dòng thứ hai chứa số nguyên, số thứ là số vi khuẩn phân đôi trong ngày thứ .
Nếu có nhiều đáp án cùng dùng đêm, in ra đáp án bất kỳ.
Ràng buộc
Ví dụ
| Input | Output | Giải thích |
|---|---|---|
| 3 9 11 2 |
3 1 0 2 3 1 1 2 1 0 |
Với : ngày 1 con duy nhất phân đôi thành hai con khối lượng ; đêm 1 chúng thành (tổng ). Ngày 2 không con nào phân đôi; đêm 2 chúng thành (tổng ). Ngày 3 cả hai phân đôi thành bốn con khối lượng ; đêm 3 chúng thành , tổng . Với : không phân đôi, sau đêm 1 con duy nhất có khối lượng . |
| 1 4 |
2 0 1 |
Ngày 1 không phân đôi, đêm 1 con duy nhất đạt khối lượng . Ngày 2 nó phân đôi thành hai con khối lượng ; đêm 2 mỗi con thành , tổng bằng . Không thể đạt chỉ với đêm vì khi đó tổng khối lượng nhiều nhất là . |
Bình luận