USACO 2015 - Crosswords

Xem PDF



Dạng bài
Ngôn ngữ cho phép
Assembly, Awk, C, C#, C++, Clang, Cobol, D, Groovy, Haskell, JS, Java, Kotlin, Lua, Node JS, OCaml, ObjectiveC, PHP, Pascal, Perl, Prolog, Pypy, Pypy 3, Python, Ruby, Rust, Scala, Scratch, Swift
Điểm: 800 (p) Thời gian: 4.0s Bộ nhớ: 512M Input: bàn phím Output: màn hình

Giống như mọi cô bò khác, Bessie thích giải ô chữ. Không may, cô em Elsie đã làm đổ sữa lên khắp cuốn sách ô chữ của Bessie, khiến chữ bị nhòe và Bessie khó nhìn ra vị trí bắt đầu của mỗi gợi ý. Nhiệm vụ của bạn là giúp Bessie khôi phục cách đánh số các gợi ý!

Bạn được cho một ô chữ chưa đánh số dưới dạng lưới \(N\) hàng và \(M\) cột (\(3 \le N \le 50\), \(3 \le M \le 50\)). Một số ô là ô trống (thường có màu trắng), còn một số ô bị chặn (thường có màu đen). Với bố cục này, việc đánh số gợi ý là một quy trình đơn giản gồm hai bước logic:

Bước 1: Xác định mỗi ô có bắt đầu một gợi ý theo chiều ngang hoặc chiều dọc hay không. Nếu một ô bắt đầu một gợi ý theo chiều ngang, ô đó phải là ô trống, ô ngay bên trái phải bị chặn hoặc nằm ngoài lưới ô chữ, và hai ô bên phải phải là ô trống (nghĩa là một gợi ý theo chiều ngang chỉ có thể biểu diễn một từ gồm ít nhất 3 ký tự). Quy tắc đối với một ô bắt đầu gợi ý theo chiều dọc cũng tương tự: ô phía trên phải bị chặn hoặc nằm ngoài lưới, và hai ô phía dưới phải là ô trống.

Bước 2: Gán số cho mỗi ô bắt đầu một gợi ý. Các ô được gán các số liên tiếp bắt đầu từ 1, theo đúng thứ tự đọc sách: các ô ở hàng trên cùng được gán số từ trái sang phải, sau đó đến hàng thứ hai, v.v. Chỉ những ô bắt đầu một gợi ý mới được gán số.

Ví dụ, xét lưới sau, trong đó . biểu thị một ô trống và # biểu thị một ô bị chặn.

...
#..
...
..#
.##

Các ô có thể bắt đầu một gợi ý theo chiều ngang hoặc chiều dọc được đánh dấu bằng ! dưới đây:

!!!
#..
!..
..#
.##

Nếu gán số cho các ô này, ta được:

123
#..
4..
..#
.##

Lưu ý rằng ô chữ được mô tả trong dữ liệu vào có thể không thỏa mãn những điều kiện thường thấy ở các ô chữ đã xuất bản. Chẳng hạn, một số ô trống có thể không thuộc bất kỳ gợi ý nào.

Dữ liệu vào

Dòng đầu tiên chứa \(N\)\(M\), cách nhau bởi một dấu cách.

\(N\) dòng tiếp theo, mỗi dòng mô tả một hàng của lưới và chứa \(M\) ký tự. Mỗi ký tự là . (một ô trống) hoặc # (một ô bị chặn).

Dữ liệu ra

Trên dòng đầu tiên, in ra số lượng gợi ý.

Trên mỗi dòng còn lại, in ra hàng và cột xác định vị trí của một gợi ý, theo thứ tự đã mô tả ở trên. Ô trên cùng bên trái có vị trí \((1,1)\). Ô dưới cùng bên phải có vị trí \((N,M)\).

Ví dụ

Ví dụ 1

Input
5 3
...
#..
...
..#
.##
Output
4
1 1
1 2
1 3
3 1

Nguồn

USACO 2014 December Contest, Bronze — Crosswords. Tác giả đề: Mark Gordon, 2014.

https://usaco.org/index.php?page=viewproblem2&cpid=488

Bình luận

Mới nhất
Tải bình luận...

Không có bình luận nào.

Kỳ thi: