(C语言)华为OD机考:统一考试 C卷 + D卷 + B卷 +A卷
真题目录:【C语言题解版】华为 OD 机试 C卷抽中题库清单(全真题库)含考点说明
专栏:(C语言)最新华为OD机试C卷+D卷+AB卷
题目描述
n (3≤n≤90000 且可以整除 3 )个学生排成一排,学生编号分别是 1 到 n,n 为 3 的整倍数,老师随机抽签决定将所有学生分成 m 个 3 人的小组(n == 3 * m) 。
为了便于同组学生交流,老师决定将小组成员安排到一起,也就是同组成员彼此相连,同组任意两个成员之间无其它组的成员。
因此老师决定调整队伍,老师每次可以调整任何一名学生到队伍的任意位置,计为调整了一次, 请计算最少调整多少次可以达到目标。
注意:对于小组之间没有顺序要求,同组学生之间没有顺序要求。
输入描述
第一行输入初始排队顺序序列
第二行输入分组排队顺序序列
输出描述
输出一个整数x,表示至少调整x次站位
用例
输入
4 2 8 5 3 6 1 9 7
6 3 1 2 4 8 7 9 5
输出
1
说明
分组分别为:6,3,1一组,2,4,8一组,7,9,5一组
初始排队顺序中,只要将5移动到1后面,变为:
4 2 8 3 6 1 5 9 7
即可满足分组排队顺序要求。
因此至少需要调整1次站位。
用例2
输入
8 9 7 5 6 3 2 1 4
7 8 9 4 2 1 3 5 6
输出
0
用例3
输入
7 9 8 5 6 4 2 1 3
7 8 9 4 2 1 3 5 6
输出
1
解题思路
为了计算给定输入序列的最少调整次数,我们需要遵循以下步骤:
-
映射学生到组号:根据第二行的分组排队序列,将每个学生映射到一个组号上。每3个学生属于同一组。
-
转换初始序列为组号序列:根据映射,将初始排队序列转换为对应的组号序列。
-
记录组号的出现位置:为每个组创建一