#HK5272. 「UOI 2019 Stage 4 Day1」二进制操作
「UOI 2019 Stage 4 Day1」二进制操作
题目描述
题目译自 Ukrainian Olympiads in Informatics 2019 Stage 4 Day1 T1. Двійкові маніпуляції
科扎克·武斯在信息学课程中总是遇到「二」的问题……不,不是因为他不擅长计算机。而是最近所有的作业都必须在一个特别喜欢 的幂的自动机上完成。
的幂是指形如 的数字,其中 是一个非负整数。例如, 是 的幂,而 则不是。
自动机操作一个长度为 的整数数组 ,其中 是 的幂。自动机唯一能做的操作是将第 个位置的数字移动到数组的开头,同时将从开头到该位置的所有数字向后移动一位。例如,如果 ,将第 个元素移动到开头后,数组变为 。请注意,自动机只能对 是 的幂的位置执行此操作。
武斯正全力完成他的最后一份家庭作业——对于给定的数组,编写一个序列 ,将数组转换为非递减排序的数组。他已经取得了一些进展,但他请求你也完成同样的任务,以便核对答案。请帮助他找到这样的序列!
输入格式
第一行包含两个整数 和 ,分别表示数组长度和子任务编号。保证 是 的幂。
第二行包含 个整数 ,表示数组的元素。
输出格式
第一行输出一个整数 ,表示命令的数量。
第二行输出 个整数 ,表示排序数组的命令序列。这样的序列可能有多个,因此输出任意一个(不必是最短的)。
4 0
4 3 2 1
4
2 4 4 2
在第一个样例中,数组初始为 。将第 个元素移动到开头后,数组变为 。然后两次将最后一个元素移动到开头,第一次得到 ,第二次得到 。最后一步将第 个元素移动到开头,得到 ,这是一个非递减排序的数组。
4 0
1 3 1 2
8
2 4 2 2 4 4 2 2
在第二个样例中,数组初始为 。将第 个元素移动到开头后,数组变为 。然后将第 个元素移动到开头,得到 。最后将最后一个元素移动到开头,得到 ,这是一个有序数组。
数据范围与提示
详细子任务附加限制及分值如下表所示:
| 子任务 | 分值 | 附加限制 |
|---|---|---|
| ;所有数字不同 | ||
| ;所有数字不同 | ||
| ;所有数字不同 | ||
| 数组中恰好有 个数字为 ,其余为 | ||
| 所有数字不同 | ||
| 无附加限制 |