题目描述
题目译自 NordicOI 2024 T2 「Anime Shops」
考虑一个有 n 名玩家和 n 把椅子的游戏。椅子将被排列成一个圆圈,每个玩家将坐在一把椅子上。游戏中还会有一次铃声响起,次数不定。
每把椅子都有一个从 1 到 n 的整数,表示当铃声响起时,坐在椅子上的玩家必须顺时针移动的步数。如果铃声响起后每把椅子都正好有一个玩家,则椅子的排列是合法的。
你的任务是找到一个合法的椅子排列,或者判断没有这样的排列。
输入格式
第一行包含一个整数 t,表示输入数据的组数。接下来每两行描述了一组输入数据。每组数据第一行包含一个整数 n。第二行包含整数 s1,s2,…,sn,表示椅子上的数字。
输出格式
对于每个测试用例,如果存在合法的椅子排列,则首先输出 YES,否则输出 NO。如果答案是 YES,还要输出一个可能的顺时针排列。如果有几个合法的排列,你可以输出其中的任何一个。
3
4
1 1 1 1
4
1 1 1 2
5
4 1 2 1 2
YES
1 1 1 1
NO
YES
2 4 1 1 2
数据范围与提示
对于所有输入数据,满足:
- 1≤t≤1000
- 1≤n≤100
- 1≤si≤n (1≤i≤n)
详细子任务附加限制及分值如下表所示。
| 子任务 |
分值 |
附加限制 |
| 1 |
8 |
1≤n≤8 |
| 2 |
5 |
si=sj (i=j) |
| 3 |
4 |
1≤si≤2 (1≤i≤n) |
| 4 |
7 |
1≤si≤3 (1≤i≤n) |
| 5 |
12 |
1≤si≤4 (1≤i≤n) |
| 6 |
15 |
1≤si≤5 (1≤i≤n) |
| 7 |
20 |
1≤n≤16 |
| 8 |
29 |
无附加限制 |