AT_test001_g アルファベット探し

题目描述

高桥君被朋友出了一道这样的谜题。 首先,给定如图 $1$ 所示的 $7$ 行 $7$ 列、共 $49$ 个格子的黑白图形 $A,B,C$。 ![](https://cdn.luogu.com.cn/upload/vjudge_pic/AT_test001_g/9a4ad6d15d9ad62f6309ad4425bf6490717b61cb.png) 图 $1$:给定的 $A,B,C$ 形状 请你回答,在给定的图中,分别有多少个 $A,B,C$ 的形状。给定的图中所有的黑色格子都属于 $A,B,C$ 的一部分,且不会出现 $A,B,C$ 以外的其他图形。 此外,$A,B,C$ 的形状可以任意按正整数倍放大,放大后的形状也视为相同的形状。因此,图 $2(a)$ 中的 $3$ 个 $A$ 都要计为 $A$。 另外,如图 $2(b)$ 所示,$90$ 度的旋转也视为相同的形状。 ![](https://cdn.luogu.com.cn/upload/vjudge_pic/AT_test001_g/ccbef1a5c450db8b57dc7c2714e2b6f628f8f09e.png) 图 $2(a)$:$2$ 倍、$3$ 倍放大的 $A$ 的例子 图 $2(b)$:旋转后的 $A$ 的例子 需要注意的是,$A,B,C$ 的形状是包含周围的白色格子的,判断是否为某个字母时要考虑周围的白格。如图 $3$ 所示,构成 $A$ 的 $7$ 行 $7$ 列区域和构成 $B$ 的 $7$ 行 $7$ 列区域不会重叠,输入不会出现这样的情况。 ![](https://cdn.luogu.com.cn/upload/vjudge_pic/AT_test001_g/8800e175428c72bd580d5d5ae1913be2ccc67151.png) 图 $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 翻译