#6813. 数组变形记
数组变形记
题目背景
小蓝在掌握了数组的基础操作后,设计了一个奇妙的数组变形流水线。他希望通过一系列简单的规则,将一个普通的数组转变成全新的样子。请你编写程序,模拟这个完整的变形过程。
题目描述
给定一个长度为 的正整数数组 以及三个额外参数 ,请严格按照以下五个步骤对数组进行变换:
-
去重保留
从左到右遍历数组 ,对于值重复出现的元素,只保留第一次出现的位置,删除后面所有与其值相同的元素。将得到的新数组记为 。题目保证 的长度至少为 。 -
区间反转
给定参数 (),将数组 中第 到第 个元素(下标从 开始)之间的部分反转,其余部分保持不变,得到数组 。 -
奇偶分离
将数组 中的所有奇数按原有的相对顺序移动到数组的前半部分,所有偶数按原有的相对顺序移动到数组的后半部分,得到数组 。 -
相邻合并
对数组 的元素进行两两合并:- 如果 的长度为偶数,将第 与第 个元素相加、第 与第 个元素相加,……,得到长度减半的新数组 。
- 如果 的长度为奇数,先将前 个元素按上述方式两两相加,最后剩下的那一个元素直接接在末尾,得到数组 。
-
循环右移
给定非负整数 ,将数组 循环右移 位。也就是说,每个元素向右移动 个位置,移出数组尾部的元素从数组头部重新进入。得到最终数组 。
请你输出最终数组 ,以及 中所有元素的总和、最大值与最小值之差(极差)。
输入格式
第一行包含四个整数 ,分别表示初始数组的长度、区间反转的左右端点,以及循环右移的步数。
第二行包含 个正整数,表示初始数组 的各个元素,数与数之间用空格隔开。
输出格式
共三行:
第一行输出最终数组 的所有元素,用空格分隔。
第二行输出一个整数,表示 所有元素的总和。
第三行输出一个整数,表示 中最大值与最小值之差(极差)。若 中只有一个元素,极差视为 。
样例
7 2 3 1
2 3 2 5 3 8 2
10 8
18
2
样例解释
初始数组 。
- 去重保留: 依次保留,第三个 删除, 保留,第五个 删除, 保留,最后的 删除。得到 。
- :反转第 到第 个元素。 中第 个是 ,第 个是 ,反转后变为 ,即 。
- 奇偶分离:奇数部分为 ,偶数部分为 ,拼接得到 。
- 相邻合并:长度 为偶数,相邻相加 ,,得 。
- 循环右移 位: 右移 位后最后一个 移动到前面,得到 。
的元素和为 ;最大值为 ,最小值为 ,极差为 。
数据范围
- (去重后数组的长度)
- 数组中的元素均为不超过 的正整数。
相关
在以下作业中: