trang chủ / bài tập / findspruce

Đếm cây thông

Đề bài

Mô tả

Cho một bảng gồm n hàng và m cột, mỗi ô chứa ký tự * hoặc .. Hàng được đánh số từ 1 đến n từ trên xuống, cột được đánh số từ 1 đến m từ trái sang phải.

Một tập ô của bảng được gọi là cây thông chiều cao k với gốc tại ô (x,y) nếu:

  • Mọi ô trong tập đều chứa ký tự *.
  • Với mọi 1ik, tất cả các ô nằm trên hàng x+i1 và có cột thuộc đoạn [yi+1,y+i1] đều thuộc tập. Không ô nào khác được thuộc tập.

Nói cách khác, cây thông chiều cao k là một tam giác gồm k hàng liên tiếp: hàng trên cùng chỉ có đúng ô (x,y), mỗi hàng kế tiếp mở rộng thêm một ô sang trái và một ô sang phải. Toàn bộ tam giác phải nằm gọn trong bảng.

Hai cây thông được xem là khác nhau nếu chúng khác gốc hoặc khác chiều cao. Đặc biệt, một ô chứa * bất kỳ luôn là một cây thông chiều cao 1, và nếu tại một gốc tồn tại cây thông chiều cao k thì tại gốc đó cũng tồn tại cây thông với mọi chiều cao nhỏ hơn k, và tất cả đều được đếm.

Hãy đếm tổng số cây thông có trong bảng.

Dữ liệu vào

  • Dòng đầu chứa số nguyên t là số bộ dữ liệu.
  • Với mỗi bộ dữ liệu:
    • Dòng đầu chứa hai số nguyên nm.
    • n dòng tiếp theo, mỗi dòng chứa m ký tự ci,j mô tả nội dung bảng.

Dữ liệu ra

Với mỗi bộ dữ liệu, in ra trên một dòng tổng số cây thông có trong bảng tương ứng.

Ràng buộc

  • 1t10
  • 1n,m500
  • ci,j. hoặc *
  • Tổng n·m trên tất cả các bộ dữ liệu không vượt quá 5002

Ví dụ

Input Output Giải thích
2
2 3
.*.
***
2 3
.*.
**.
5
3
Bảng thứ nhất có 5 cây thông: một cây chiều cao 2 gốc tại (1,2), cùng bốn cây chiều cao 1 gốc tại (1,2), (2,1), (2,2), (2,3). Bảng thứ hai chỉ có ba ô *, và gốc (1,2) không lên được chiều cao 2 vì ô (2,3)., nên đáp án là 3.
2
5 5
*...*
**.**
*****
**.**
*...*
3 3
*.*
...
*.*
19
4
Bảng thứ nhất có 18 ô *, trong đó đúng một gốc đạt được chiều cao 2(2,2), nên tổng là 18+1=19. Bảng thứ hai chỉ có bốn ô * ở bốn góc và chúng rời rạc nhau, nên mỗi ô đóng góp đúng một cây thông chiều cao 1.
1
4 5
.***.
*****
*****
*.*.*
23 Bảng có 18 ô *. Ngoài 18 cây thông chiều cao 1, còn có bốn cây chiều cao 2 gốc tại (1,3), (2,2), (2,3), (2,4) và một cây chiều cao 3 gốc tại (1,3), tổng cộng 23.

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