#P16491. [PM2321]魔术师的 Young 方阵
[PM2321]魔术师的 Young 方阵
题目背景
小明是学校魔术社团的新晋魔术师,他最近学会了一种叫做 "Young 方阵" 的纸牌排列技巧。所谓 Young 方阵,就是将 共 16 张编号互不相同的纸牌排成一个方阵,使得每一行从左到右编号递增,每一列从上到下编号也递增。
社团团长给了小明一个打乱的 纸牌方阵,要求他通过交换纸牌的方式将其恢复成 Young 方阵。每次交换可以任意选择两张纸牌交换位置。小明想知道,最少需要交换多少次才能完成这个任务。
题目描述
给定一个长度为 16 的整数序列,将其按行优先顺序填入一个 的方阵中。你的任务是求出最少需要多少次交换,才能使得这个方阵成为一个 Young 方阵。
一个 的 Young 方阵满足:对于任意位置 (),都有:
- 如果 ,则 (每行从左到右递增)
- 如果 ,则 (每列从上到下递增)
输入格式
一行 16 个整数,表示按行优先顺序排列的方阵元素。保证这些整数是 到 的一个排列,互不相同。
输出格式
一个整数,表示将给定方阵变成 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 个整数。
- 每个整数在 范围内。
- 16 个整数互不相同。