Trận chiến trên biển
Đề bài
Mô tả
Trên một lưới có đặt chiếc tàu, mỗi tàu chiếm đúng ô liên tiếp. Không ô nào thuộc hai tàu cùng lúc, nhưng các tàu có thể nằm sát cạnh nhau. Người chơi không biết vị trí các tàu.
Người chơi bắn vào một số ô: sau mỗi phát bắn cô ấy được cho biết ô đó có thuộc một chiếc tàu nào không (trúng) hay không (trượt).
Người chơi đã bắn phát và toàn bộ đều trượt. Các ô đã bắn được đánh dấu bằng ký tự 1 trong xâu mô tả lưới.
Hãy tìm số ô ít nhất mà nếu bắn vào tất cả các ô đó thì chắc chắn trúng ít nhất một chiếc tàu, với mọi cách bố trí tàu hợp lệ (nghĩa là mọi cách đặt tàu độ dài không đè lên nhau và không đặt lên ô đã bắn trượt). Dữ liệu đảm bảo tồn tại ít nhất một cách bố trí tàu hợp lệ.
Dữ liệu vào
- Dòng đầu chứa bốn số nguyên dương , , , : độ dài lưới, số tàu, độ dài mỗi tàu, và số phát đã bắn.
- Dòng thứ hai chứa một xâu độ dài gồm các ký tự 0 và 1. Ký tự thứ bằng 1 nếu ô đã bị bắn (trượt), bằng 0 nếu chưa. Xâu có đúng ký tự 1.
Dữ liệu ra
- Dòng đầu in ra số ô ít nhất cần bắn.
- Dòng thứ hai in ra chỉ số các ô đó (đánh số từ đến từ trái sang phải), mỗi ô đúng một lần, theo thứ tự tùy ý.
Nếu có nhiều đáp án, in ra một đáp án bất kỳ.
Ràng buộc
Ví dụ
| Input | Output | Giải thích |
|---|---|---|
| 5 1 2 1 00100 |
2 2 5 |
Có một tàu độ dài 2. Nó có thể nằm ở các ô (1,2) hoặc (4,5). Cần bắn hai ô, một ở phần trái và một ở phần phải, mới chắc chắn trúng. |
| 13 3 2 3 1000000010001 |
2 3 5 |
Hai đoạn ô trống là (chứa tối đa 3 tàu) và (chứa tối đa 1 tàu), tổng 4 vị trí. Có 3 tàu nên chỉ cần bắn ô để chắc chắn trúng một tàu. |
Bình luận