#P15598. [2025年山东第一轮集训] 仇恨

[2025年山东第一轮集训] 仇恨

题目描述

给定一个 1,2,,n1,2,\ldots,n 的排列

a1,a2,,an,a_1,a_2,\ldots,a_n,

你需要对这个排列做不超过 10410^4 次如下操作,使得

a=[1,2,,n].a=[1,2,\ldots,n].

一次操作如下:

  • 选择一个整数 1kn1\le k\le n,然后将整个排列分成 kk 个非空段 D1,D2,,DkD_1,D_2,\ldots,D_k,其中 D1D_1 包含了 aa 的前 D1|D_1| 个元素,D2D_2 包含了 aa 的接下来 D2|D_2| 个元素,以此类推。你需要保证

    D1+D2++Dk=n.|D_1|+|D_2|+\cdots+|D_k|=n.
  • 对于所有编号 ii 为奇数的段 DiD_i,将 DiD_i 反序。

  • a=DkDk1D1.a=D_kD_{k-1}\cdots D_1.

注意:10410^4 次操作并不能获得满分,评分细则见“子任务”。

输入格式

第一行,一个正整数 nn

第二行,nn 个正整数 a1,a2,,ana_1,a_2,\ldots,a_n

输出格式

第一行,一个非负整数 tt,表示操作次数。

接下来 tt 行,每行表示一次操作。第一个数 kk 表示段数,接下来 kk 个数表示

D1,D2,,Dk.|D_1|,|D_2|,\ldots,|D_k|.

样例输入 #1

7
2 6 4 3 1 5 7

样例输出 #1

4
4 2 3 1 1
3 2 3 2
3 1 4 2
4 1 2 2 2

Special Judge

下发文件中有 chk.cpp,将其与 testlib.h 置于同一目录下并编译,即可得到可执行文件 chk

在 Linux 下,使用如下命令检查你的答案是否正确:

./chk animus.in animus.out animus.out

子任务与评分

本题共有两个子任务,每个子任务 5050 分,并且有五个评分参数

q1>q2>q3>q4>q5.q_1>q_2>q_3>q_4>q_5.

对于子任务中的每个测试点,设你的操作次数是 tt,设

s=i=15[tqi],s=\sum_{i=1}^{5}[t\le q_i],

得分如下表所示:

ss 0 1 2 3 4 5
得分 0 7 16 32 45 50

一个子任务的得分是其中所有测试点得分的最小值,整道题的得分是两个子任务的得分之和。

子任务 nn q1q_1 q2q_2 q3q_3 q4q_4 q5q_5
1 292^9 10410^4 20002000 12001200 510510 200200
2 2162^{16} 10001000 500500 190190

@下发文件