#P16491. [PM2321]魔术师的 Young 方阵

[PM2321]魔术师的 Young 方阵

题目背景

小明是学校魔术社团的新晋魔术师,他最近学会了一种叫做 "Young 方阵" 的纸牌排列技巧。所谓 Young 方阵,就是将 4×44 \times 4 共 16 张编号互不相同的纸牌排成一个方阵,使得每一行从左到右编号递增,每一列从上到下编号也递增。

社团团长给了小明一个打乱的 4×44 \times 4 纸牌方阵,要求他通过交换纸牌的方式将其恢复成 Young 方阵。每次交换可以任意选择两张纸牌交换位置。小明想知道,最少需要交换多少次才能完成这个任务。

题目描述

给定一个长度为 16 的整数序列,将其按行优先顺序填入一个 4×44 \times 4 的方阵中。你的任务是求出最少需要多少次交换,才能使得这个方阵成为一个 Young 方阵。

一个 4×44 \times 4 的 Young 方阵满足:对于任意位置 (i,j)(i, j)0i,j30 \le i, j \le 3),都有:

  • 如果 j>0j > 0,则 a[i][j]>a[i][j1]a[i][j] > a[i][j-1](每行从左到右递增)
  • 如果 i>0i > 0,则 a[i][j]>a[i1][j]a[i][j] > a[i-1][j](每列从上到下递增)

输入格式

一行 16 个整数,表示按行优先顺序排列的方阵元素。保证这些整数是 111616 的一个排列,互不相同。

输出格式

一个整数,表示将给定方阵变成 Young 方阵所需要的最少交换次数。

样例

样例 1

输入:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

输出:

0

解释: 已经是 Young 方阵,无需交换。

样例 2

输入:

1 5 9 13 2 6 10 14 3 7 11 15 4 8 12 16

输出:

0

解释: 这个排列本身就是 Young 方阵:

 1  5  9 13
 2  6 10 14
 3  7 11 15
 4  8 12 16

样例 3

输入:

2 1 3 4 5 6 7 8 9 10 11 12 13 14 15 16

输出:

1

解释: 只需交换前两个数即可。

数据范围

  • 输入恰好包含 16 个整数。
  • 每个整数在 [1,16][1, 16] 范围内。
  • 16 个整数互不相同。