Người Gửi: Dương Lee
- Problem:
Cửa sổ (có thể có rèm kéo) đươc biểu diễn dưới dạng 4 x 4, có 5 trạng thái như sau:
Tòa nhà có M tầng, mỗi tầng có N cửa số. Tính số cửa sổ của mỗi trạng thái.
Input
- Dòng đầu tiên của input chứa 2 số nguyên được cách nhau bởi dấu cách ( 1 <= M, N <=100).
- Những dòng sau miêu tả trạng thái tòa nhà hiện tại. Mỗi cửa sổ được biểu diễn bởi 1 trong ô 4x4 như trên, và những cửa sổ được phân cách bởi ký tự “#”. Xem ví dụ input để hiểu rõ. Xây dựng miêu tả sẽ có chính xác 5M + 1 dòng, mỗi dòng có 5N + 1 ký tự.
Output
Gồm 5 số là số cửa sổ tương ứng với các trạng thái như trên của tòa nhà
Example:
Input
1 2
###########
#....#****#
#....#****#
#....#....#
#....#....#
###########
Output:
1 0 1 0 0
Input
2 3
################
#****#****#****#
#****#****#****#
#****#....#****#
#....#....#****#
################
#....#****#****#
#....#****#....#
#....#....#....#
#....#....#....#
################
Output:
1 1 2 1 1
- Solution:
Input
2 3
################
#****#****#****#
#****#****#****#
#****#....#****#
#....#....#****#
################
#....#****#****#
#....#****#....#
#....#....#....#
#....#....#....#
################
Output:
1 1 2 1 1
Bài này chỉ có các trường hợp của sổ như trên. Vậy thay vì duyệt toàn bộ kí tự thì chỉ cần duyệt các kí tự đại diện của nó:
- Tạo mảng đánh dấu.
- Nhảy tưng hàng: mỗi hàng cách nhau 5 kí tự.
- Nhảy từng cột: mỗi cột cách nhau 5 kí tự
- Với mỗi hàng và cột xét đến thì cho đếm tt[0]++ (là trạng thái không có *);
- Duyệt k= từ hàng đó đến liên tiếp 4 hàng sau nó. Nếu hàng xét đến có '*' thì tt[k+1]++; và tt[k]--;
Xem hình để hiểu rõ hơn: