螺旋矩阵排序
题目描述
Y 同学得到了一个 的二维矩阵,其中包含了从 到 的所有正整数,且每个数恰好出现一次。
我们定义一种顺时针螺旋顺序来遍历该矩阵:从左上角 出发,首先向右移动到 ,然后向下到 ,再向左到 ,接着向上到 ,然后继续向右……如此循环,不断向内螺旋,直到遍历完所有 个位置。
Y 同学可以对矩阵执行一种操作:选择矩阵中的任意一个元素,并将其与它在螺旋顺序中的下一个元素交换位置。
他的目标是通过若干次操作,将矩阵变为一个“螺旋递增”矩阵。一个矩阵是螺旋递增的,当且仅当沿着螺旋顺序遍历矩阵时,得到的元素序列恰好是 。
请你计算,将给定的初始矩阵转变为目标状态,所需的最小操作次数是多少。
输入格式
第一行输入一个正整数 ,表示矩阵的维度。
接下来 行,每行输入 个整数,描述这个 的矩阵。
输出格式
输出一个整数,表示所需的最小操作次数。由于结果可能很大,请将答案对 取模。
样例
样例输入 #1
2
3 1
2 4
样例输出 #1
3
样例输入 #2
3
3 2 1
6 5 4
9 8 7
样例输出 #2
10
提示
样例 1 解释
对于 矩阵,螺旋顺序为 。
- 初始矩阵为
[[3, 1], [2, 4]]。 - 按螺旋顺序展开,得到序列 。
- 目标矩阵为
[[1, 2], [4, 3]]。 - 按螺旋顺序展开,目标序列为 。
问题转化为:将序列 通过相邻元素交换的方式变为序列 所需的最小次数。这等价于计算序列 的逆序对数量。 中的逆序对有:
- 共 3 对,因此最小操作次数为 3。
数据范围与约定
对于 的数据,保证:
- 矩阵中的元素是 到 的一个排列。
- 最终答案需要对 取模。
京公网安备11010802045784号