AT_code_thanks_festival_14_quala_h 模様替え

题目描述

进入 12 月,2014 年也即将结束。为了焕然一新,决定更换壁纸的图案来迎接 2015 年。 手头有一块纵向 $R$ 行、横向 $C$ 列的布料,如果需要的话,可以从这块布料中裁剪出一部分作为壁纸的设计。 在从布料上裁剪设计时,必须沿着格子的边界裁剪,并且设计必须是长方形的形状。 构成布料的每个格子都只被涂上了一种颜色。 实际上,每年都在追求有趣的设计,今年也决定制作一种有趣的“点对称设计”作为模板。 所谓“点对称设计”,是指当设计的大小为纵向 $H$ 行、横向 $W$ 列时,满足以下条件: - $H \geq 2$ 且 $W \geq 2$。 - 对于所有整数 $i, j\ (1 \leq i \leq H,\ 1 \leq j \leq W)$,设计中从上往下第 $i$ 行、从左往右第 $j$ 列的格子的颜色 $c_{i,j}$,与从上往下第 $H-i+1$ 行、从左往右第 $W-j+1$ 列的格子的颜色 $c_{H-i+1,W-j+1}$ 相等。 此外,由于布料的不同位置除了颜色外还有各种有趣的地方,即使纵横大小和颜色排列完全相同,只要裁剪的原始位置不同,也视为不同的设计。因此,想知道对于给定的布料,有多少种方法可以裁剪出“点对称设计”的设计。请计算所有可能的裁剪方法数。

输入格式

输入通过标准输入给出,格式如下: > $R$ $C$ > $s_1$ > $s_2$ > $\vdots$ > $s_R$ - 第 1 行给出布料的行数 $R\ (1 \leq R \leq 250)$ 和列数 $C\ (1 \leq C \leq 250)$,以空格分隔。 - 接下来的 $R$ 行,每行给出一个长度为 $C$ 的字符串 $s_i$,表示布料的配色。$s_i$ 仅由小写英文字母组成,第 $j$ 个字符表示布料从上往下第 $i$ 行、从左往右第 $j$ 列格子的颜色。 - 对于不同的两个格子,如果表示颜色的字符相同,则颜色相同,否则颜色不同。

输出格式

输出“点对称设计”的设计个数,输出一行,末尾需换行。

说明/提示

## 部分分 本题设有部分分。 - 对于 $R \leq 20$ 且 $C \leq 20$ 的数据集 1,全部答对可得 15 分。 - 对于 $R \leq 100$ 且 $C \leq 100$ 的数据集 2,全部答对可在上述基础上再得 30 分。 - 对于无额外限制的数据集 3,全部答对可在上述两项基础上再得 55 分,总计 100 分。 ## 样例解释 1 布料的配色如下表所示。 c o d e t h a n k s d o c u m e n t s k 例如,将从上往下第 1 行、从左往右第 1 列的格子作为左上角,从上往下第 2 行、从左往右第 3 列的格子作为右下角,裁剪出纵向 2 行、横向 3 列的区域,可以得到: c o d d o c 这是一个“点对称设计”。除此之外,还有一个可以裁剪的位置,所以答案是 2。 ## 样例解释 2 即使某个“点对称设计”包含了另一个“点对称设计”,也要分别计数。此外,在本例中,b b b b 出现了 2 次,两次都要计数。 由 ChatGPT 4.1 翻译