[语言月赛202212] 旋转排列
题目背景
我们称一个数列 $p$ 是一个长度为 $n$ 的排列,当且仅当 $p$ 满足如下条件:
1. $p$ 的长度为 $n$;
2. $1, 2, 3, \dots n$ 这 $n$ 个数在 $p$ 中均**恰好**出现一次。
题目描述
对于一个排列 $p$,定义一次“shift”操作是指:将 $p$ 里的每一个数字都依次向后移动一位,并把 $p$ 的最后一个数字移动到开头去。
例如,若排列 $p$ 初始时为 $[1,4,2,3]$,则“shift”一次以后将变为 $[3,1,4,2]$。
现在,给定一个长度为 $n$ 的排列 $p$,请你按照如下规定循环操作:
1. 对当前的排列 $p$ 做一次“shift”操作;
2. 输出本次“shift”以后的排列 $p$;
3. 判断排列 $p$ 的最后一个数字是否是 $n$,如果是,则结束循环操作;否则回到 $1$ 继续操作。
提示:**请严格按照题目给出的顺序进行循环操作。**
输入输出格式
输入格式
第一行是一个整数,表示排列 $p$ 的长度 $n$。
第二行有 $n$ 个整数表示排列 $p$,第 $i$ 个整数表示 $p_i$。
输出格式
对于每次操作的第二条“输出”操作,请你输出一行 $n$ 个整数,按顺序表示当前排列的每个数,一行中相邻两个数之间用一个空格隔开。
输入输出样例
输入样例 #1
4
1 4 2 3
输出样例 #1
3 1 4 2
2 3 1 4
输入样例 #2
3
1 2 3
输出样例 #2
3 1 2
2 3 1
1 2 3
输入样例 #3
10
1 7 6 5 8 4 3 9 10 2
输出样例 #3
2 1 7 6 5 8 4 3 9 10
说明
### 样例 2 解释
对 $p = [1, 2, 3]$,按如下顺序进行循环操作:
1. 进行一次“shift”操作,$p$ 变为 $[3,1,2]$;
2. 输出当前的排列 $p$,故输出第一行为 `3 1 2`;
3. 判断 $p_3 = 2 \neq 3$,故继续循环操作;
4. 进行一次“shift”操作,$p$ 变为 $[2,3,1]$;
5. 输出当前的排列 $p$,故输出第二行为 `2 3 1`;
6. 输出判断 $p_3 = 1 \neq 3$,故继续循环操作;
7. 进行一次“shift”操作,$p$ 变为 $[1,2,3]$;
8. 输出当前的排列 $p$,故输出第二行为 `1 2 3`;
9. 输出判断 $p_3 = 3 =3$,故停止循环;
### 数据规模与约定
各测试点的信息如下表:
| 测试点编号 | $n = $ | 特殊约定 |
| :-: | :-: | :-: |
| $1$ | $1$ | 无|
| $2$ | $2$ | 无 |
| $3$ | $3$ | 无 |
| $4 \sim 6$ | $2000$ | $p_{n - 1} = n$ |
| $7 \sim 10$ | $2000$ | 无 |
对全部的测试点,保证 $1 \leq p_i \leq n \leq 2000$,$p$ 是长度为 $n$ 的排列。
By 一扶苏一