#codethanksfestival14qualah. [code_thanks_festival_14_quala_h]模様替え
[code_thanks_festival_14_quala_h]模様替え
问题描述
进入12月,2014年也即将结束。为了改变心情,我决定更换壁纸来迎接2015年。
我手头有一块长为行宽为列的布料,我决定从这块布料上切出一部分来做壁纸的设计。
在切割布料的时候,必须沿着格子线切割,并且设计必须是矩形的形状。
布料上的每个格子都被涂上了单一的颜色。
实际上,我每年都追求有趣的设计,所以今年我决定做一个“点对称设计”的图案。
当设计是“点对称设计”时,设设计的大小为行列,
- 必须满足条件和。
- 对于所有整数,设计上第 行从左数第 列的格子的颜色 和设计上第 行从左数第 列的格子的颜色 相等。
这样的情况称为“点对称设计”。
由于不同位置的布料上可能存在着各种有趣的点,所以即使纵横尺寸和颜色分布完全相同,只要切割的位置不同,就会得到不同的设计。因此,我想知道有多少种方法可以从布料上切割出关于“点对称设计”。
输入
输入以以下格式从标准输入中给出。
:
- 第一行包含布料的行数 和列数 ,以空格分隔。
- 接下来的 行包含关于布料配色的信息。其中第 行是字符串 ,长度为 。 由小写英文字母组成,左起第 个字符表示布料上第 行从左数第 列的格子的颜色。
- 对于不同的两个格子,如果它们上述颜色表示的字符相同,则它们着相同的颜色;如果不同,则着不同的颜色。
部分分
本问题设有部分分。
- 通过所有满足 和 的数据集1,可以得到15分。
- 通过所有满足 和 的数据集2,可以在上述基础上再获得30分。
- 通过没有额外限制的数据集3,可以在上述2个得分基础上再获得55分,总共可以获得100分。
输出
请输出是“点对称设计”的设计数量,以一行结束。输出末尾需包含换行符。
示例1
2 10
codethanks
documentsk
输出示例1
2
布料的配色如下表所示:
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
我们将得到“点对称设计”。另外,还可以切割出1个位置,所以答案为2。
示例2
6 4
aaaa
abba
abba
aaaa
ccbb
cdbb
输出示例2
5
即使某个“点对称设计”包含另一个“点对称设计”,我们也要分别计数。
此外,对于这个例子,
b
b
b
b
出现了2次,但我们要计为2个。