PTIT135F - Đếm cửa sổ

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:

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:

  • Code:

C++:



JAVA:


Share this

Related Posts

Previous
Next Post »