Đếm hình vuông
Đề bài
Mô tả
Cho một ma trận nhị phân (gồm các ký tự 0 và 1) kích thước . Hãy đếm số hình vuông xuất hiện trong ma trận.
Trong bài này, một hình vuông là một khung hình vuông rỗng (chỉ có viền) với độ dày viền bằng và độ dài cạnh lớn hơn hoặc bằng . Có hai loại hình vuông được chấp nhận:
- Loại 1: hình vuông có các cạnh song song với các cạnh của ma trận.
- Loại 2: hình vuông có các cạnh song song với hai đường chéo của ma trận (tức là một hình thoi vuông xoay ).
Một hình vuông hợp lệ phải:
- Tất cả các ô trên viền đều là ký tự
1. - Không có ô
1"lạ" nào (không thuộc viền) chạm vào viền theo cạnh hoặc theo góc (kề hướng). - Phần bên trong viền (nếu có) không bị xét tới — nhưng do điều kiện trên, không ô
1nào khác được nằm trong hoặc tiếp xúc với khung.
Nói cách khác: mỗi thành phần liên thông (theo hướng) của các ô 1 phải có hình dạng đúng bằng một khung hình vuông loại 1 hoặc loại 2 thì mới được tính.
Ví dụ ma trận sau chứa đúng một hình vuông loại 1:
0000000
0111100
0100100
0100100
0111100
Ma trận sau chứa đúng một hình vuông loại 2:
0000000
0010000
0101000
0010000
0000000
Dữ liệu vào
- Dòng đầu chứa một số nguyên () — số lượng bộ test.
- Mỗi bộ test bắt đầu bằng một dòng chứa hai số nguyên và ().
- dòng tiếp theo, mỗi dòng chứa ký tự
0hoặc1mô tả ma trận.
Tổng số ký tự trong toàn bộ dữ liệu vào không vượt quá .
Dữ liệu ra
In ra dòng, dòng thứ là số hình vuông trong bộ test thứ .
Ví dụ
| Input | Output | Giải thích |
|---|---|---|
| 2 8 8 00010001 00101000 01000100 10000010 01000100 00101000 11010011 11000011 10 10 1111111000 1000001000 1011001000 1011001010 1000001101 1001001010 1010101000 1001001000 1000001000 1111111000 |
1 2 |
Test 1: chứa một hình thoi (loại 2) ở giữa. Các ô 1 khác không tạo thành hình vuông hợp lệ. Test 2: chứa một khung hình vuông loại 1 ở ngoài cùng và một hình thoi loại 2 nhỏ bên trong. |
| 1 12 11 11111111111 10000000001 10111111101 10100000101 10101100101 10101100101 10100000101 10100000101 10111111101 10000000001 11111111111 00000000000 |
3 | Khung ngoài (loại 1), khung trong (loại 1), và một khung nhỏ ở giữa (loại 1). |
Bình luận