CF1427D.Unshuffling a Deck

普及+/提高

通过率:0%

时间限制:1.00s

内存限制:256MB

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

You are given a deck of nn cards numbered from 11 to nn (not necessarily in this order in the deck). You have to sort the deck by repeating the following operation.

  • Choose 2≤k≤n2 \le k \le n and split the deck in kk nonempty contiguous parts D1,D2,…,DkD_1, D_2,\dots, D_k (D1D_1 contains the first ∣D1∣|D_1| cards of the deck, D2D_2 contains the following ∣D2∣|D_2| cards and so on). Then reverse the order of the parts, transforming the deck into Dk,Dk−1,…,D2,D1D_k, D_{k-1}, \dots, D_2, D_1 (so, the first ∣Dk∣|D_k| cards of the new deck are DkD_k, the following ∣Dk−1∣|D_{k-1}| cards are Dk−1D_{k-1} and so on). The internal order of each packet of cards DiD_i is unchanged by the operation.

You have to obtain a sorted deck (i.e., a deck where the first card is 11, the second is 22 and so on) performing at most nn operations. It can be proven that it is always possible to sort the deck performing at most nn operations.

Examples of operation: The following are three examples of valid operations (on three decks with different sizes).

  • If the deck is [3 6 2 1 4 5 7] (so 33 is the first card and 77 is the last card), we may apply the operation with k=4k=4 and D1=D_1=[3 6], D2=D_2=[2 1 4], D3=D_3=[5], D4=D_4=[7]. Doing so, the deck becomes [7 5 2 1 4 3 6].
  • If the deck is [3 1 2], we may apply the operation with k=3k=3 and D1=D_1=[3], D2=D_2=[1], D3=D_3=[2]. Doing so, the deck becomes [2 1 3].
  • If the deck is [5 1 2 4 3 6], we may apply the operation with k=2k=2 and D1=D_1=[5 1], D2=D_2=[2 4 3 6]. Doing so, the deck becomes [2 4 3 6 5 1].

你有一副包含 nn 张卡片的牌组,卡片编号为 11 到 nn(在牌组中不一定按此顺序排列)。你需要通过重复执行以下操作来将牌组排序。

  • 选择一个满足 2≤k≤n2 \le k \le n 的整数 kk,并将牌组划分为 kk 个非空、连续的部分 D1,D2,…,DkD_1, D_2,\dots, D_k(其中 D1D_1 包含牌组最前面 ∣D1∣|D_1| 张卡片,D2D_2 包含接下来的 ∣D2∣|D_2| 张卡片,依此类推)。然后将这些部分的顺序反转,使牌组变为 Dk,Dk−1,…,D2,D1D_k, D_{k-1}, \dots, D_2, D_1(即新牌组最前面 ∣Dk∣|D_k| 张卡片是 DkD_k,接下来的 ∣Dk−1∣|D_{k-1}| 张卡片是 Dk−1D_{k-1},依此类推)。每个子段 DiD_i 内部卡片的相对顺序在该操作中保持不变。

你需要在至多 nn 次操作内,将牌组变为升序排列(即第一张卡片为 11,第二张为 22,……,第 nn 张为 nn)。可以证明:对任意初始排列,总存在一种策略,在至多 nn 次操作内完成排序。

操作示例:以下是三个在不同大小牌组上进行的有效操作示例。

  • 若牌组为 [3 6 2 1 4 5 7](即 33 是第一张卡片,77 是最后一张),可选取 k=4k=4,并令 D1=D_1=[3 6],D2=D_2=[2 1 4],D3=D_3=[5],D4=D_4=[7]。执行该操作后,牌组变为 [7 5 2 1 4 3 6]。
  • 若牌组为 [3 1 2],可选取 k=3k=3,并令 D1=D_1=[3],D2=D_2=[1],D3=D_3=[2]。执行该操作后,牌组变为 [2 1 3]。
  • 若牌组为 [5 1 2 4 3 6],可选取 k=2k=2,并令 D1=D_1=[5 1],D2=D_2=[2 4 3 6]。执行该操作后,牌组变为 [2 4 3 6 5 1]。

输入格式

The first line of the input contains one integer nn (1≤n≤521\le n\le 52) — the number of cards in the deck.

The second line contains nn integers c1,c2,…,cnc_1, c_2, \dots, c_n — the cards in the deck. The first card is c1c_1, the second is c2c_2 and so on.

It is guaranteed that for all i=1,…,ni=1,\dots,n there is exactly one j∈1,…,nj\in{1,\dots,n} such that cj=ic_j = i.

输入的第一行包含一个整数 nn(1≤n≤521\le n\le 52)—— 表示牌组中的卡片数量。

第二行包含 nn 个整数 c1,c2,…,cnc_1, c_2, \dots, c_n —— 表示牌组中的卡片。第一张牌为 c1c_1,第二张牌为 c2c_2,依此类推。

保证对所有 i=1,…,ni=1,\dots,n,均存在唯一一个 j∈{1,…,n}j\in\{1,\dots,n\},使得 cj=ic_j = i。

输出格式

On the first line, print the number qq of operations you perform (it must hold 0≤q≤n0\le q\le n).

Then, print qq lines, each describing one operation.

To describe an operation, print on a single line the number kk of parts you are going to split the deck in, followed by the size of the kk parts: ∣D1∣,∣D2∣,…,∣Dk∣|D_1|, |D_2|, \dots , |D_k|.

It must hold 2≤k≤n2\le k\le n, and ∣Di∣≥1|D_i|\ge 1 for all i=1,…,ki=1,\dots,k, and ∣D1∣+∣D2∣+⋯+∣Dk∣=n|D_1|+|D_2|+\cdots + |D_k| = n.

It can be proven that it is always possible to sort the deck performing at most nn operations. If there are several ways to sort the deck you can output any of them.

第一行输出你执行的操作次数 qq(需满足 0≤q≤n0\le q\le n)。

随后输出 qq 行,每行描述一次操作。

为描述一次操作,在一行中先输出你要将牌堆分割成的段数 kk,再输出这 kk 段的大小:∣D1∣,∣D2∣,…,∣Dk∣|D_1|, |D_2|, \dots , |D_k|。

需满足 2≤k≤n2\le k\le n,对所有 i=1,…,ki=1,\dots,k 有 ∣Di∣≥1|D_i|\ge 1,且 ∣D1∣+∣D2∣+⋯+∣Dk∣=n|D_1|+|D_2|+\cdots + |D_k| = n。

可以证明:总存在一种方式,至多通过 nn 次操作即可将牌堆排序。若存在多种排序方案,输出任意一种即可。

输入输出样例

  • 输入#1

    4
    3 1 2 4

    输出#1

    2
    3 1 2 1
    2 1 3
  • 输入#2

    6
    6 5 4 3 2 1

    输出#2

    1
    6 1 1 1 1 1 1
  • 输入#3

    1
    1

    输出#3

    0

说明/提示

Explanation of the first testcase: Initially the deck is [3 1 2 4].

  • The first operation splits the deck as [(3) (1 2) (4)] and then transforms it into [4 1 2 3].
  • The second operation splits the deck as [(4) (1 2 3)] and then transforms it into [1 2 3 4].

Explanation of the second testcase: Initially the deck is [6 5 4 3 2 1].

  • The first (and only) operation splits the deck as [(6) (5) (4) (3) (2) (1)] and then transforms it into [1 2 3 4 5 6].

第一个测试用例的解释:初始牌组为 [3\ 1\ 2\ 4]。

  • 第一次操作将牌组分割为 [(3)\ (1\ 2)\ (4)],然后将其变换为 [4\ 1\ 2\ 3]。
  • 第二次操作将牌组分割为 [(4)\ (1\ 2\ 3)],然后将其变换为 [1\ 2\ 3\ 4]。

第二个测试用例的解释:初始牌组为 [6\ 5\ 4\ 3\ 2\ 1]。

  • 第一次(也是唯一一次)操作将牌组分割为 [(6)\ (5)\ (4)\ (3)\ (2)\ (1)],然后将其变换为 [1\ 2\ 3\ 4\ 5\ 6]。

输入解题思路,AI测评打分。不知道怎么写?

首页