#P16534. [THUPC 2026 决赛] 年鉴整理

[THUPC 2026 决赛] 年鉴整理

题目背景

来自 2026 清华大学学生程序设计竞赛暨高校邀请赛(THUPC2026)决赛。

题解等资源可在 https://github.com/dapingguo8/THUPC2026-final 查看。

茶话会临近尾声,作为庆典十周年专属的怀旧环节,小 T 特意找出了历届 THUPC 的珍贵档案---一排记录了十年点滴的赛事年鉴,供大家传阅。

翻阅过后,两人准备将年鉴放回书架。由于岁月流逝,年鉴的破损程度参差不齐。心思细腻的小 S 提议,在放回时将它们按破损程度严格递增重新排序,以此直观地展现时间沉淀的痕迹。然而,年鉴的纸张已经十分脆弱,每次只能极其小心地将其中的一本向前平移一位,且这无可避免地会略微增加该年鉴的破损度。更棘手的是,留给他们的整理时间十分有限。小 S 想知道,能否在有限的操作次数内,将这些年鉴放回书架并整理得井然有序呢?

题目描述

书架上摆放着 nn 本年鉴。初始时,第 i (1in)i \ (1 \le i \le n) 本年鉴的破损度为 aia_i

每次移动时,首先需要选择一个位置 p (1pn1)p \ (1 \le p \le n - 1),然后将第 p+1p + 1 本年鉴向前移动至第 pp 本年鉴前,移动后它的破损度将会增加 11

由于时间有限,总共只能进行不超过 n2nn ^ 2 - n 次移动。作为众多翻阅年鉴的参与者之一,你需要帮助小 S 规划出一组具体的移动方案,使得最终书架上的年鉴破损度从左到右严格递增

输入格式

每个测试点中包含多组测试数据。输入的第一行包含一个正整数 T (1T10)T \ (1 \le T \le 10),表示数据组数。对于每组测试数据:

  • 第一行包含一个正整数 n (1n500)n \ (1 \le n \le 500),表示年鉴的数量。
  • 第二行包含 nn 个正整数 a1,a2,,an (1ai109)a_1, a_2, \dots, a_n \ (1 \le a_i \le 10^9),分别表示初始时每一本年鉴的破损度

输出格式

对于每组测试数据,若存在可行的移动方案:

  • 第一行输出一个非负整数 k (0kn2n)k \ (0 \le k \le n ^ 2 - n),表示移动次数。
  • 第二行输出 kk 个正整数 p1,p2,,pk (1pin1)p_1, p_2, \dots, p_k \ (1 \le p_i \le n - 1),分别表示每次移动选定的位置。

若无法使得最终书架上的年鉴破损度从左到右严格递增,则仅输出一行一个整数 1-1

3
2
1 2
2
2 1
3
4 5 1
0

-1
2
2 1 

提示

  • 对于第一组测试数据,序列 [1,2][1,2] 已为严格增序列。
  • 对于第二组测试数据,无法在规定步数内将序列 [2,1][2,1] 变为严格增序列。
  • 对于第三组测试数据,首先选择下标 22,将序列变为 [4,2,5][4,2,5];随后选择下标 11,将序列变为 [3,4,5][3,4,5]