#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. 最长循环移位涉及的奶牛数量。
    若没有循环移位(所有奶牛位置不变 ),第二个数输出 -1

样例输出

2 3

输出解析
存在两个循环移位:

  • 第一个循环涉及奶牛 5、1、2(长度 3 )。
  • 第二个循环涉及奶牛 3、4(长度 2 )。
    最长循环长度为 3 。