AT_test001_g アルファベット探し
题目描述
高桥君被朋友出了一道这样的谜题。
首先,给定如图 $1$ 所示的 $7$ 行 $7$ 列、共 $49$ 个格子的黑白图形 $A,B,C$。

图 $1$:给定的 $A,B,C$ 形状
请你回答,在给定的图中,分别有多少个 $A,B,C$ 的形状。给定的图中所有的黑色格子都属于 $A,B,C$ 的一部分,且不会出现 $A,B,C$ 以外的其他图形。
此外,$A,B,C$ 的形状可以任意按正整数倍放大,放大后的形状也视为相同的形状。因此,图 $2(a)$ 中的 $3$ 个 $A$ 都要计为 $A$。
另外,如图 $2(b)$ 所示,$90$ 度的旋转也视为相同的形状。

图 $2(a)$:$2$ 倍、$3$ 倍放大的 $A$ 的例子
图 $2(b)$:旋转后的 $A$ 的例子
需要注意的是,$A,B,C$ 的形状是包含周围的白色格子的,判断是否为某个字母时要考虑周围的白格。如图 $3$ 所示,构成 $A$ 的 $7$ 行 $7$ 列区域和构成 $B$ 的 $7$ 行 $7$ 列区域不会重叠,输入不会出现这样的情况。

图 $3$:不会作为输入出现的重叠图形的例子
请你回答,在给定的图中,$A,B,C$ 的形状分别各有多少个。
输入按如下格式从标准输入给出。
输入格式
输入共 $H+1$ 行。
- 第 $1$ 行包含两个整数 $H$(表示给定图的行数,$1 \leq H \leq 1000$)和 $W$(表示给定图的列数,$1 \leq W \leq 1000$),用空格隔开。
- 接下来的 $H$ 行,每行包含 $W$ 个字符,表示图的状态 $c_{(i,j)}$($0 \leq i \leq H-1, 0 \leq j \leq W-1$)。
- 第 $i+2$ 行第 $j+1$ 个字符 $c_{(i,j)}$ 为 `.` 或 `o`,表示第 $i+1$ 行第 $j+1$ 列的格子的状态:
- `.`:该格子为白色。
- `o`:该格子为黑色。
- 图中不会出现 $A,B,C$ 以外的图形。
- $A,B,C$ 的图形不会重叠。
输出格式
请按 $A,B,C$ 的顺序,用空格隔开,在一行中输出 $A$ 的个数、$B$ 的个数、$C$ 的个数。
同一行末尾输出换行符。
说明/提示
- $A,B,C$ 的形状可以任意正整数倍放大,也可以以 $90$ 度为单位旋转。
- 输入保证所有黑色格子都属于 $A,B,C$ 的一部分,且 $A,B,C$ 之间不会重叠。
- 输入数据规模较大,请注意程序效率。
样例输入 $1$:
```
7 7
.......
...o...
..o.o..
.o...o.
.ooooo.
.o...o.
.......
```
样例输出 $1$:
```
1 0 0
```
说明:有 $1$ 个 $A$,没有 $B$ 和 $C$。
样例输入 $2$:
```
7 14
..............
.oooo....oooo.
.o...o..o...o.
.oooo....oooo.
.o...o..o...o.
.oooo....oooo.
..............
```
样例输出 $2$:
```
0 2 0
```
说明:有 $2$ 个 $B$(一个正常方向,一个 $180$ 度旋转)。
样例输入 $3$:
```
14 42
..........................................
.................o...o........o.o.........
....oooooo.......ooooo.......o.o.o........
....oooooo.......o...o.......o.o.o........
..oo......oo......o.o........o.o.o........
..oo......oo.......o.........ooooo........
..oo......................................
..oo......................................
..oo......oo............ooo...............
..oo......oo...........o...o..............
....oooooo.............o...o..............
....oooooo.............o...o..............
........................o.o...............
..........................................
```
样例输出 $3$:
```
1 1 2
```
说明:有 $1$ 个 $180$ 度旋转的 $A$,$1$ 个逆时针 $90$ 度旋转的 $B$,$1$ 个顺时针 $90$ 度旋转的 $C$,$1$ 个 $2$ 倍放大的 $C$。
样例输入 $4$:
```
6 8
........
........
........
........
........
........
```
样例输出 $4$:
```
0 0 0
```
说明:没有 $A,B,C$。
样例输入 $5$:
```
40 40
........................................
..ooo.....o.................ooo.........
.o...o...o.o....oooo.......o.o....o.o...
.o......o...o..o...o......o..o...o...o..
.o...o..ooooo...oooo.......o.o...o...o..
..ooo...o...o..o...o........ooo..o...o..
................oooo..............ooo...
........................................
...........................o.o..........
..........................o.o.o.........
.........ooo..............o.o.o.........
........o...o.............o.o.o.........
..ooo...o...o..ooooo......ooooo.........
.o...o..o...o..o.o.o....................
.....o...o.o...o.o.o..............o.o...
.o...o.........o.o.o.............o.o.o..
..ooo...........o.o..............o.o.o..
.................................o.o.o..
.................................ooooo..
...........................oooo.........
..........................o...o.........
...........................oooo.........
.................ooo......o...o.........
................o...o......oooo.........
..oooooo........o.......................
..oooooo........o...o...................
....oo..oo.......ooo...............oooo.
....oo..oo........................o...o.
....oo....oo.......................oooo.
....oo....oo......................o...o.
....oo..oo.........................oooo.
....oo..oo..............................
..oooooo................................
..oooooo................ooo.............
.................ooo.....o.o......o.o...
................o...o....o..o....o.o.o..
................o........o.o.....o.o.o..
................o...o...ooo......o.o.o..
.................ooo.............ooooo..
........................................
```
样例输出 $5$:
```
4 7 6
```
由 ChatGPT 4.1 翻译