SP2161 JPIX - Pixel Shuffle
题目描述
位图图像中的像素经过重新排列后,有时会变得杂乱无章。不过,通过不断地进行这种重新排列,最终能恢复到原始图像。这是因为“重新排列”是对图像中的单元格进行有限的一对一映射(也称为置换)。
你的任务是编写程序,读取一个正整数$n$,以及一系列用于定义$n \times n$图像的“重新排列”$\sigma$的基本变换。程序需要计算一个最小的正整数$m$,使得应用$\sigma$变换$m$次后,总是可以还原到最初的$n \times n$图像。
例如,如果$\sigma$是逆时针旋转90度,则$m=4$。
输入格式
输入由多个测试样例组成,以一个单独的数字0表示输入结束。对于每个测试样例:
第一行包含一个整数$n$(其中$2 \leq n \leq 1024$,且$n$为偶数)。$n$表示图像的边长,图像内部表示为一个大小为$n \times n$的像素矩阵$(a^j_i)$,其中$i$是行号,$j$是列号,左上角像素位于第0行第0列。
第二行是一组用空格分隔的单词,最多包含32个。这些单词可以是关键词**id**、**rot**、**sym**、**bhsym**、**bvsym**、**div**和**mix**,或是在关键词后加一个“-”组成的词。每个关键词**key**表示一个基本变换,如图中所示,而**key-**表示该变换的逆操作。例如,**rot-**表示顺时针旋转90度。列表$k_1, k_2, \ldots, k_p$描述的复合变换可以写作$\sigma = k_1 \circ k_2 \circ \ldots \circ k_p$。例如,“bvsym rot-”表示先进行顺时针旋转90度,然后对图像的下半部分进行垂直对称变换。
输出格式
对于每个测试样例,输出一行,该行输出的是使复合变换$\sigma^m$等同于身份变换的最小正整数$m$。可以假定所有输入下,$m$的值总是小于$2^{31}$。
**本翻译由 AI 自动生成**