#CSPJ1019. 等腰直角三角形(triangle)
等腰直角三角形(triangle)
题目描述
小 Z 学几何学疯了,开始对三角形产生了浓厚的兴趣,因此他想要寻找大量三角形的图片。因为小 Z 是计算机专业出身,所以小 Z 尝试用计算机来帮助他识别图片中的三角形。
为了简化任务,小 Z 特别指出只需要识别直角三角形。具体而言,问题可以描述为:在一个仅由大写字母组成 行 列的字母方阵中,需要找出由不同字母组成的等腰直角三角形的数量,并统计所有等腰直角三角形的总数。
- 所谓等腰直角三角形,就是有一个角是直角的等腰三角形,或者有两条边相等的直角三角形。
- 在方阵中,等腰直角三角形只有两种可能的形态:
- 直角边与方阵的两条边平行,例如:
AAA B
AA BB
A BBB
- 斜边与方阵的边平行,例如:
B A
BB AAA
BBB AAAAA
BB
B
注意,每个等腰直角三角形至少需要由 个字母组成,并且每一个等腰直角三角形中的字母必须都是同一种。
现在,小 Z 想知道方阵中每一种字母组成的等腰直角三角形的个数,以及所有字母组成的等腰直角三角形的总个数。由于小 Z 学疯了,现在没有精力做这个事情,这件事情就委托你来完成了。
输入格式
从 triangle.in
文件读入数据。
第一行输入一个整数 ,表示方阵大小。
接下来有 行,每行有 个大写英文字母,描述方阵。
输出格式
输出到 triangle.out
文件。
第一行输出方阵总共有多少个等腰直角三角形,满足等腰直角三角形内部均是同一种字符。
然后对方阵中出现的每个字母,求出由它所组成的等腰直角三角形的个数,并按照字典序顺序各自输出一行。假设方阵中出现了 个字母,就要输出 行,每行先输出字母,然后空两个空格输出仅由该字母组成的等腰直角三角形个数。具体参见样例输出(注意每行字母和个数之间有 个空格)。
输入输出样例
3
AAB
ABB
BBC
4
A 1
B 3
C 0
说明/提示
的数据,满足 。
的数据,满足 。
的数据,满足 。
另 的数据,满足字母全是 A
。
的数据,满足 。
的数据,满足 。
相关
在下列比赛中: