题库练习 「春季测试 2023」密码锁
← 上一题 下一题 →

A6634 | 「春季测试 2023」密码锁

时间限制2500ms
内存限制512MB
通过 / 提交0/0

题目描述

寒假过后,小 I 回到学校,发现自己忘记了自行车锁的密码,于是请你帮忙。

小 I 自行车上的密码锁有 $n$ 个拨圈,每个拨圈有 $k$($k \leq 4$)格。密码锁上的每一格都包含一个正整数,其中第 $j$ 个拨圈的第 $i$ 格上的正整数为 $a _ {i, j}$。

![](/uploads/acgo/image/bf829178a4a7acb4_7b59a1670916.png)

<p style="text-align: center"><i>一个锁的例子,其中 $k = n = 3$,每列表示一个拨圈,拨圈的格子从上往下编号。</i></p>

你可以对每个拨圈拨若干次(也可以不拨),每拨一次拨圈,它的格子就会进行一次轮换。形式化地,拨第 $j$ 个拨圈一次,则会让第 $j$ 个拨圈上第 $i$ 格的数字移动到第 $((i \bmod k) + 1)$ 格,其他拨圈不动。

![](/uploads/acgo/image/969c4c41e971098f_6ab68a0dfcd3.png)

<p style="text-align: center"><i>一个拨动拨圈的例子,对左侧的锁拨一次第二个拨圈得到右侧的锁。</i></p>

为了方便记忆,小 I 设定密码时要求同一行上的数字尽可能靠近。
形式化地,对于 $1 \leq i \leq k$,定义密码锁第 $i$ 行的松散度为

$$ c(i) = \max \limits _ {j = 1} ^ n a _ {i, j} - \min \limits _ {j = 1} ^ n a _ {i, j} $$

同时定义整个密码锁的松散度为

$$ C = \max \limits _ {1 \leq i \leq k} c(i) $$

因为能开锁的状态满足 $C$ 尽可能小,因此小 I 希望你找出最小的 $C$ 值。

输入格式

**本题有多组测试数据,题目保证一个测试点中所有测试数据的 $k$ 相同。**

第一行包含两个正整数 $T, k$,分别表示测试数据组数和密码锁拨圈上的格数。

接下来一共 $T$ 组数据,每组数据格式如下:

第一行包含一个正整数 $n$,表示拨圈数。

接下来 $k$ 行,每行包含 $n$ 个正整数,其中第 $i$ 行第 $j$ 个整数 $a _ {i,j}$ 表示密码锁第 $j$ 个拨圈上第 $i$ 格对应的数字。

**注意输入的矩阵中每一列对应一个拨圈,而非每一行对应一个拨圈。**

输出格式

对于每组数据,输出一行包含一个整数,表示所有方案中 $C$ 的最小值。

输入输出样例

输入 #1
2 3
3
1 2 1
2 3 2
3 1 3
2
1 2
2 1
1 2
输出 #1
0
1
C++ 编辑器
输入
输出