#P3400. 仓鼠窝(Hamster Nest)

0
    ID: 8478 传统题 1000ms 256MiB 尝试: 0 已通过: 0 难度: (无) 上传者: 标签>P3400单调队列单调栈悬线法计数CSP-S

仓鼠窝(Hamster Nest)

仓鼠窝(Hamster Nest)

题目描述

萌萌哒的 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 个。

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

输入格式

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

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

输出格式

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

样例输入 #1

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

样例输出 #1

26

数据范围

本题时限 1s1\text{s},内存限制 125M125\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

知识点与难度

本题涉及的知识点从属于 CSP-S,难度(CF Rating):1800。


测试点分布

Subtask 分值 测试点编号 说明
0 10 1 样例
1 20 2~7 小规模 n,m≤200 / 边界 1×1 / 全0矩阵输出0
2 15 8~11 Hack: 3000×3000全1矩阵答案超2×10^13 / Hack: 仅中心1格被破坏 / Hack: 棋盘格01交替
3 30 12~20 大规模 n,m≤3000 单调栈子矩阵计数压力
4 25 21~25 随机破损率矩阵回归测试

出处:原题链接