#L3948. 「春季测试 2023」密码锁
「春季测试 2023」密码锁
题目描述
寒假过后,小 I 回到学校,发现自己忘记了自行车锁的密码,于是请你帮忙。
小 I 自行车上的密码锁有 个拨圈,每个拨圈有 ()格。密码锁上的每一格都包含一个正整数,其中第 个拨圈的第 格上的正整数为 。

一个锁的例子,其中 ,每列表示一个拨圈,拨圈的格子从上往下编号。
你可以对每个拨圈拨若干次(也可以不拨),每拨一次拨圈,它的格子就会进行一次轮换。形式化地,拨第 个拨圈一次,则会让第 个拨圈上第 格的数字移动到第 格,其他拨圈不动。

一个拨动拨圈的例子,对左侧的锁拨一次第二个拨圈得到右侧的锁。
为了方便记忆,小 I 设定密码时要求同一行上的数字尽可能靠近。形式化地,对于 ,定义密码锁第 行的松散度为
$$c(i) = \max \limits_{j = 1}^n a_{i, j} - \min \limits_{j = 1}^n a_{i, j} $$同时定义整个密码锁的松散度为
因为能开锁的状态满足 尽可能小,因此小 I 希望你找出最小的 值。
输入格式
本题有多组测试数据,题目保证一个测试点中所有测试数据的 相同。
第一行包含两个正整数 ,分别表示测试数据组数和密码锁拨圈上的格数。
接下来一共 组数据,每组数据格式如下:
第一行包含一个正整数 ,表示拨圈数。
接下来 行,每行包含 个正整数,其中第 行第 个整数 表示密码锁第 个拨圈上第 格对应的数字。
注意输入的矩阵中每一列对应一个拨圈,而非每一行对应一个拨圈。
输出格式
对于每组数据,输出一行包含一个整数,表示所有方案中 的最小值。
样例 1
输入
2 3
3
1 2 1
2 3 2
3 1 3
2
1 2
2 1
1 2
输出
0
1
第一组样例对应题目描述中的例子。
在拨第二个拨圈一次后,每个拨圈都是 ,此时松散度为 。
容易证明无论如何松散度都不可能小于 ,因此输出 。
样例 2
见选手目录下的 lock/lock2.in 和 lock/lock2.ans。
本样例中 。
样例 3
见选手目录下的 lock/lock3.in 和 lock/lock3.ans。
本样例中 。
样例 4
见选手目录下的 lock/lock4.in 和 lock/lock4.ans。
本样例中 。
样例 5
见选手目录下的 lock/lock5.in 和 lock/lock5.ans。
本样例中 。