CF1427D.Unshuffling a Deck
普及+/提高
通过率:0%
时间限制:1.00s
内存限制:256MB
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
You are given a deck of n cards numbered from 1 to n (not necessarily in this order in the deck). You have to sort the deck by repeating the following operation.
- Choose 2≤k≤n and split the deck in k nonempty contiguous parts D1,D2,…,Dk (D1 contains the first ∣D1∣ cards of the deck, D2 contains the following ∣D2∣ cards and so on). Then reverse the order of the parts, transforming the deck into Dk,Dk−1,…,D2,D1 (so, the first ∣Dk∣ cards of the new deck are Dk, the following ∣Dk−1∣ cards are Dk−1 and so on). The internal order of each packet of cards Di is unchanged by the operation.
You have to obtain a sorted deck (i.e., a deck where the first card is 1, the second is 2 and so on) performing at most n operations. It can be proven that it is always possible to sort the deck performing at most n 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 3 is the first card and 7 is the last card), we may apply the operation with k=4 and D1=[3 6], D2=[2 1 4], D3=[5], D4=[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=3 and D1=[3], D2=[1], D3=[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=2 and D1=[5 1], D2=[2 4 3 6]. Doing so, the deck becomes [2 4 3 6 5 1].
你有一副包含 n 张卡片的牌组,卡片编号为 1 到 n(在牌组中不一定按此顺序排列)。你需要通过重复执行以下操作来将牌组排序。
- 选择一个满足 2≤k≤n 的整数 k,并将牌组划分为 k 个非空、连续的部分 D1,D2,…,Dk(其中 D1 包含牌组最前面 ∣D1∣ 张卡片,D2 包含接下来的 ∣D2∣ 张卡片,依此类推)。然后将这些部分的顺序反转,使牌组变为 Dk,Dk−1,…,D2,D1(即新牌组最前面 ∣Dk∣ 张卡片是 Dk,接下来的 ∣Dk−1∣ 张卡片是 Dk−1,依此类推)。每个子段 Di 内部卡片的相对顺序在该操作中保持不变。
你需要在至多 n 次操作内,将牌组变为升序排列(即第一张卡片为 1,第二张为 2,……,第 n 张为 n)。可以证明:对任意初始排列,总存在一种策略,在至多 n 次操作内完成排序。
操作示例:以下是三个在不同大小牌组上进行的有效操作示例。
- 若牌组为 [3 6 2 1 4 5 7](即 3 是第一张卡片,7 是最后一张),可选取 k=4,并令 D1=[3 6],D2=[2 1 4],D3=[5],D4=[7]。执行该操作后,牌组变为 [7 5 2 1 4 3 6]。
- 若牌组为 [3 1 2],可选取 k=3,并令 D1=[3],D2=[1],D3=[2]。执行该操作后,牌组变为 [2 1 3]。
- 若牌组为 [5 1 2 4 3 6],可选取 k=2,并令 D1=[5 1],D2=[2 4 3 6]。执行该操作后,牌组变为 [2 4 3 6 5 1]。
输入格式
The first line of the input contains one integer n (1≤n≤52) — the number of cards in the deck.
The second line contains n integers c1,c2,…,cn — the cards in the deck. The first card is c1, the second is c2 and so on.
It is guaranteed that for all i=1,…,n there is exactly one j∈1,…,n such that cj=i.
输入的第一行包含一个整数 n(1≤n≤52)—— 表示牌组中的卡片数量。
第二行包含 n 个整数 c1,c2,…,cn —— 表示牌组中的卡片。第一张牌为 c1,第二张牌为 c2,依此类推。
保证对所有 i=1,…,n,均存在唯一一个 j∈{1,…,n},使得 cj=i。
输出格式
On the first line, print the number q of operations you perform (it must hold 0≤q≤n).
Then, print q lines, each describing one operation.
To describe an operation, print on a single line the number k of parts you are going to split the deck in, followed by the size of the k parts: ∣D1∣,∣D2∣,…,∣Dk∣.
It must hold 2≤k≤n, and ∣Di∣≥1 for all i=1,…,k, and ∣D1∣+∣D2∣+⋯+∣Dk∣=n.
It can be proven that it is always possible to sort the deck performing at most n operations. If there are several ways to sort the deck you can output any of them.
第一行输出你执行的操作次数 q(需满足 0≤q≤n)。
随后输出 q 行,每行描述一次操作。
为描述一次操作,在一行中先输出你要将牌堆分割成的段数 k,再输出这 k 段的大小:∣D1∣,∣D2∣,…,∣Dk∣。
需满足 2≤k≤n,对所有 i=1,…,k 有 ∣Di∣≥1,且 ∣D1∣+∣D2∣+⋯+∣Dk∣=n。
可以证明:总存在一种方式,至多通过 n 次操作即可将牌堆排序。若存在多种排序方案,输出任意一种即可。
输入输出样例
输入#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测评打分。不知道怎么写?