理解前缀旋转操作:
每种前缀旋转操作将字符串的前 x_i
个字符移动到末尾,相当于将字符串向左移动 x_i
个字符。比如,x_i=2
操作会将前 2 个字符移到末尾,相当于将字符串左移 2 位。
目标:
对于每个查询,目标是将字符串循环左移 y_i
位,我们需要通过 x_1, x_2, ..., x_k
中的操作来组合出目标左移 y_i
。
数学分析:
每次旋转操作将字符串循环左移 x_i
个位置。我们需要通过多个操作组合,最终得到一个等于目标左移 y_i
的值。
给定正整数 n ,以及 k 个可用的前缀旋转操作:第 i 个操作将字符串的前 xi 个字符移动到末尾。你可以对字符串执行任意次操作(可重复使用相同的 xi ) 。
对于目标偏移 y(0≦y<n) ,定义目标结果为循环左移 y 位(即将前 y 个字符移至末尾)的字符串。现在需要回答 m 个查询:对于每个查询给定的偏移 yi ,求使用前缀旋转操作,达成目标偏移 如 所需的最少操作次数;若无法达到,则输出 −1 。
【名词解释】