三角形网格由边长为1的等边三角形组成(见第3页)。三角形网格中的路径是网格中任意有限的三角形(边长为1)序列,使得每两个连续的三角形共享一条边。
如果任何有限数量的三角形的点所形成的形状中所包含的网格中的任何两个三角形被一些由该形状中所包含的三角形所形成的路径所连接,那么这个形状就被称为岛状。
图1.1、1.2和1.3中的图形是岛。
图1.4中的形状不是一个岛。
图2.2、2.3和2.5中的图形是全等的。
我们的目的是对所有边长为1的三角形所能形成的非全等的岛进行系统的描述,并计算出有多少个这样的岛。
每个由最多十个三角形组成的岛的边界是一个由网格的单元段组成的多边形链。它可以被旋转,也就是说。
它可以被旋转,也就是说,它可以在不脱离铅笔的情况下勾勒出轮廓,这样,它的每一段都被跟踪一次,我们就会回到初始点。不过,可能发生的情况是,某些点必须被穿过不止一次(见图2.4)。
幸运的是,如果是由最多十个三角形组成的岛,形状的周长是相连的(因此可以在不把铅笔从纸上拆下来的情况下绘制轮廓),与图1.2中的不同。
在围绕周长转圈时,在每个单元段之后,我们做一个以下类型的转弯。
a-左转120度,b-左转60度,c-0度(即实际上不转),d-右转60度,e-右转120度。
围绕小岛的每个周期都可以用一个单词来描述,这个单词由一组字母组成,每个字母都告诉我们在周长所包含的每个连续的单位段之后应该做哪个转弯。循环的描述有多少个字母,就有多少个单位段。这意味着我们也描述了多边形链的最后一段之后的转弯,尽管这并不是唯一确定形状所需要的。然而,这个多余的字母非常有助于将一个围绕形状的循环的描述转换为另一个仅在初始点上有所不同的描述。
cdddcddd, dcdddcdd, cbbbcbbb这些词描述了围绕图2.1形状的不同周期。
cbeddcde, adcabcbb, abcbbadc这些词描述了围绕图2.2形状的不同周期。
acdabbcb i cddebced这些词描述了围绕图2.3的形状的不同周期。
如果在围绕某个形状的循环中,形状的内侧一直在右侧,我们称这种循环为顺时针循环。
对于每个岛,我们可以确定所有与之全等的岛的集合以及这些岛的顺时针循环。
一个岛的代码是这样一个词,即。
它是对某个与该岛一致的岛的轮廓线的顺时针循环的描述,它是满足前述条件的所有词中词汇量最小的一个。
对于图2.2和图2.3中描述的岛,它们是一致的,我们考虑到了围绕它们的所有顺时针循环。
beddcdec, eddcdecb, ddcdecbe, dcdecbed, cdecbedd, decbeddc, ecbeddcd, cbeddcde和bcedcdde, cedcddeb, edcddebc, dcddebce, cddebced, ddebcedc, debcedcd, ebcedcdd,所以它们的共同代码是:bcedcdde,是上述所有单词中词义最小的。
图2.4中描述的岛屿的代码是:aadecddcddde。
编写一个程序。
对于一个给定的大小岛的代码,生成所有大小岛的代码,这些岛可以通过添加一个三角形得到,对于一个给定的整数,生成所有大小岛的代码。 在标准输入的第一行给出了一个整数(),表示查询次数。
接下来的每一行都包含一个某种类型的查询。
类型1的查询由字母K和一个由最多十个三角形组成的岛的代码组成,中间用一个空格分隔。
类型2的查询由字母N和一个整数()组成,用一个空格隔开。
查询的答案应打印到标准输出。
对于类型1的查询,可以通过从与给定代码所描述的岛全等的岛中增加一个三角形来获得岛的不同代码的数量。
在接下来的一行中,所有这些代码,用单个空格隔开,应按词法顺序打印。
对于类型2的查询,应该打印由三角形组成的岛的不同代码的数量。
在接下来的一行中,所有这些代码都应按词法顺序打印。
通过www.DeepL.com/Translator(免费版)翻译