#P3400. 仓鼠窝

仓鼠窝

题目描述

萌萌哒的 Created equal 是一只小仓鼠,小仓鼠自然有仓鼠窝啦。

仓鼠窝是一个由 n×mn\times m 个格子组成的行数为 nn、列数为 mm 的矩阵。小仓鼠现在想要知道,这个矩阵中有多少个子矩阵。

比如说有一个 2×32\times 3 的矩阵,那么 1×11\times 1 的子矩阵有 66 个,1×21\times 2 的子矩阵有 44 个,1×31\times 3 的子矩阵有 22 个,2×12\times 1 的子矩阵有 33 个,2×22\times 2 的子矩阵有 22 个,2×32\times 3 的子矩阵有 11 个,所以子矩阵共有 6+4+2+3+2+1=186+4+2+3+2+1=18 个。

可是仓鼠窝中有的格子被破坏了。现在小仓鼠想要知道,有多少个内部不含被破坏的格子的子矩阵。

输入格式

第一行两个正整数 nnmm,分别表示仓鼠窝的行数 nn,列数 mm

接下来 nn 行,每行 mm 个数,每个数代表对应的格子,非 0011。若为 00,表示这个格子被破坏;反之代表这个格子是完好无损的。

输出格式

仅一个正整数,表示未被破坏的子矩阵的个数。

3 4
1 1 1 1
1 0 1 1
1 1 0 1
26

提示

本题时限 2s2\text{s},内存限制 256M256\text{M},因新评测机速度较为接近 NOIP 评测机速度,请注意常数问题带来的影响。

数据编号 nn mm 特殊性质
1,2,31, 2, 3 22
44 1010
5,65, 6 20002000 所有格子均未被破坏
77 25002500 30003000 有且仅有一个格子被破坏
88 30003000 25002500
99 200200
10,11,1210, 11, 12 500500
13,1413, 14 10001000 10001000
1515 15001500
1616 25002500 25002500
1717 30003000
1818 30003000 25002500
19,2019, 20 30003000