#2501. [USACO14MAR] Reordering the Cows B
[USACO14MAR] Reordering the Cows B
USACO2014MAR,铜组第一题
题目描述
农夫约翰(Farmer John)有 ( N ) 头奶牛(( 1 <= N <= 100 )),编号为 ( 1 ) 到 ( N ),它们排成一列。初始顺序由数组 ( A ) 描述,其中 ( A(i) ) 是位置 ( i ) 上奶牛的编号。农夫约翰想将它们重新排列成数组 ( B ) 描述的顺序,其中 ( B(i) ) 是最终位置 ( i ) 上应有的奶牛编号。
为了从 “( A ) 顺序” 调整到 “( B ) 顺序”,奶牛们会执行一系列循环移位(cyclic shifts)。每次循环移位的过程是:某头奶牛先移动到它在 ( B ) 中的目标位置,挤走该位置当前的奶牛;被挤走的奶牛接着移动到自己的目标位置,再挤走新位置的奶牛,依此类推,直到某头奶牛回到最初循环开始的位置,形成一个循环。例如,初始顺序中若从奶牛 ( 5 ) 开始循环,它会移动到位置 ( 2 ),挤走奶牛 ( 1 );奶牛 ( 1 ) 移动到位置 ( 4 ),挤走奶牛 ( 2 );奶牛 ( 2 ) 移动到位置 ( 1 ),此时循环结束(回到起始的 “挤走” 链条起点 )。
奶牛们会持续执行循环移位,直到所有奶牛都处于 ( B ) 中的目标位置。需注意:每头奶牛恰好参与 一个 循环移位,除非它在 ( A ) 和 ( B ) 中的位置相同(无需移动 )。
请计算奶牛重新排列过程中,循环移位的数量,以及最长循环移位涉及的奶牛数量。
输入格式
- 第 1 行:整数 ( N )(奶牛数量 )。
- 第 2 至 ( N+1 ) 行:第 ( i+1 ) 行是整数 ( A(i) )(初始顺序第 ( i ) 位的奶牛编号 )。
- 第 ( N+2 ) 至 ( 2N+1 ) 行:第 ( N+i+1 ) 行是整数 ( B(i) )(目标顺序第 ( i ) 位的奶牛编号 )。
样例输入
5
5
1
4
2
3
2
5
3
1
4
输入解析:
- 初始顺序 ( A ):位置 1~5 的奶牛编号为
[5, 1, 4, 2, 3]
。 - 目标顺序 ( B ):位置 1~5 的奶牛编号为
[2, 5, 3, 1, 4]
。
输出格式
输出一行,包含两个整数:
- 循环移位的总数量。
- 最长循环移位涉及的奶牛数量。
若没有循环移位(所有奶牛位置不变 ),第二个数输出-1
。
样例输出
2 3
输出解析:
存在两个循环移位:
- 第一个循环涉及奶牛
5、1、2
(长度 3 )。 - 第二个循环涉及奶牛
3、4
(长度 2 )。
最长循环长度为 3 。