Đế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.47 awk 1.3.4 gcc 16.2.0 dotnet 10.0.400 g++ 16.2.0 g++-themis 16.2.0 g++17 16.2.0 g++20 16.2.0 g++23 16.2.0 clang++ 22.1.8 dmd 2.113.0 dart 3.13.2 gforth 0.7.3 gfortran 12.2.0 go 1.27.0 groovyc 5.1.1 javac 25.0.4 node 26.8.1 julia 1.12.7 kotlinc 2.4.10 lean 4.33.1 sbcl 2.2.9 lua 5.4.9 nim 2.2.10 fpc 3.2.2 fpc-themis 3.2.2 perl 5.36.0 php 8.5.10 pike 8.0 swipl 9.0.4 pypy3 7.3.23 python3 3.14.7 racket 8.7 ruby 4.0.6 rustc 1.98.0 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 swiftc 6.3.3 tclsh 8.6 bun 1.4.0 deno 2.9.6 v 0.5.2 zig 0.16.0