P15723 [JAG 2023 Summer Camp #3] Digit-only subrectangles

题目描述

有一个由 $H$ 行 $W$ 列方格组成的网格。每个方格内要么是一个数字,要么是一个星号 ('*')。从上往下数第 $i$ 行、从左往右数第 $j$ 列的方格记为 $(i, j)$。 在此问题中,我们考虑**子矩形**,即构成一个矩形的方格集合。更精确地说,一个方格集合 $S$ 是一个子矩形,当且仅当存在四个整数 $t$, $b$, $l$ 和 $r$,满足 $1 \leq t \leq b \leq H$, $1 \leq l \leq r \leq W$ 且 $S = \{(i, j) \mid t \leq i \leq b \land l \leq j \leq r\}$。如果一个子矩形中的每个方格都是数字,则称其为**纯数字子矩形**。一个纯数字子矩形的**分数**定义为该子矩形内所有方格数字之和的平方。 你的任务是计算所有纯数字子矩形的分数之和。由于答案可能很大,请输出其对 $998,244,353$ 取模的结果。

输入格式

输入包含一个单独的测试用例,格式如下: $$ \begin{aligned} &H \ W \\ &A_{1,1} A_{1,2} \cdots A_{1,W} \\ &A_{2,1} A_{2,2} \cdots A_{2,W} \\ &\vdots \\ &A_{H,1} A_{H,2} \cdots A_{H,W} \end{aligned} $$ 第一行包含两个整数 $H$ 和 $W$,满足 $1 \leq H \leq 2,000$ 且 $1 \leq W \leq 2,000$。接下来的 $H$ 行,每行包含 $W$ 个字符。其中,$A_{i,j}$ 是方格 $(i, j)$ 中的字符,它要么是一个 $0$ 到 $9$ 之间的数字(含),要么是一个星号 ('*')。保证至少存在一个纯数字子矩形。

输出格式

输出一行,表示所有纯数字子矩形的分数之和,结果对 $998,244,353$ 取模。

说明/提示

在样例输入 1 中,共有五个纯数字子矩形,如下图所示。它们的分数之和为 $4^2 + 4^2 + 9^2 + (4 + 4)^2 + (4 + 9)^2 = 346$。 :::align{center} ![](https://cdn.luogu.com.cn/upload/image_hosting/fk7yz4jb.png) 图 F.1. 样例输入 1 中的纯数字子矩形 ::: 翻译由 DeepSeek V3.2 完成