Đếm hình vuông

Đề bài

Mô tả

Cho một ma trận nhị phân (gồm các ký tự 01) kích thước n×m. 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 1 và độ dài cạnh lớn hơn hoặc bằng 2. Có hai loại hình vuông được chấp nhận:

  1. 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.
  2. 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 45).

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ề 8 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 ô 1 nà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 8 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 t (1t10000) — số lượng bộ test.
  • Mỗi bộ test bắt đầu bằng một dòng chứa hai số nguyên nm (2n,m250).
  • n dòng tiếp theo, mỗi dòng chứa m ký tự 0 hoặc 1 mô tả ma trận.

Tổng số ký tự trong toàn bộ dữ liệu vào không vượt quá 106.

Dữ liệu ra

In ra t dòng, dòng thứ i là số hình vuông trong bộ test thứ i.

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 11×11 (loại 1), khung trong 7×7 (loại 1), và một khung 2×2 nhỏ ở giữa (loại 1).

Bình luận

Không có bình luận tại thời điểm này.

gnatmake 12.2.0 a68g 3.1.2 nasm 2.16.1 as_x64 2.46 awk 1.3.4 gcc 16.1.0 csc 6.12.0.200 g++ 16.1.0 g++-themis 16.1.0 g++17 16.1.0 g++20 16.1.0 g++23 16.1.0 clang++ 22.1.6 dmd 2.112.0 dart 3.12.1 gforth 0.7.3 gfortran 12.2.0 go 1.26.3 groovyc 5.0.6 javac 25.0.3 node 26.2.0 kotlinc 2.3.21 sbcl 2.2.9 lua 5.4.8 nim 2.2.10 fpc 3.2.2 fpc-themis 3.2.2 perl 5.36.0 php 8.5.6 pike 8.0 pypy3 7.3.23 python3 3.14.5 racket 8.7 ruby 4.0.5 rustc 1.96.0 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 tclsh 8.6 bun 1.3.14 deno 2.8.1 v 0.5.1 zig 0.16.0