现有一个由1到n共n个整数构成的序列p(每个数有且仅有1个)和一个整数k,规定p的n个元素为p1,p2,……,pn, 你需要按照升序对这个序列进行排序(即最终将序列转换为:1,2,3,……,n)。为此,你可以执行下列操作若干次(可以为0次)完成排序(我们也称其为”k步排序”):
(1) 从序列中任意选择两个元素pi和pj,确保|i−j|=k,交换pi和pj的值。
不幸的是,有些序列无法用固定的k完成最终排序。比如:当序列为:[2,4,3,1],k=2时,我们就无法按照上述操作完成排序,将序列转换为递增序列。
为了利用上述操作完成最终排序,你可以在排序之前在序列中任意选择两个元素pi和pj(此时,不要求|i−j|=k),并交换它们,我们将这种操作称为“预交换”操作。
你的任务是:
(1) 确定所给序列是否可以不经过“预交换”操作,仅采用k步排序实现序列排序;
(2) 如果无法实现,是否可以只经过一次“预交换”操作,然后采用k步排序实现序列排序。
比如:当k=2,序列为:[2,4,3,1]时,可以先执行一次“预交换“操作,交换p1和p4的值,将序列转换为:[1,4,3,2], 然后采用k步排序:i=2,j=4 (此时|2−4|=2),将序列转为为:[1,2,3,4],此时序列已经递增有序;