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}

图 F.1. 样例输入 1 中的纯数字子矩形
:::
翻译由 DeepSeek V3.2 完成