题目描述 假设你有一个 位数的滚轮式密码锁,密码锁的每一个滚轮都有 面,分别刻着 的数字,并且可以向上或向下循环滚动。这个密码锁的滚轮一开始是随机的。
将滚轮从左到右编号,最左侧是滚轮 ,最右侧是滚轮 。当所有滚轮滚到数字 的位置时,才能解锁这个密码锁。
每次操作均按如下操作方式:
确定一个区间 ( ) ,旋转该区间内的所有滚轮,使这些滚轮一起向下或向上滚动一格。向上滚动会将滚轮数字 ,向下滚动则是 。并且滚轮处于 数字时,向上滚动会回归数字 的位置;处于 数字时,向下滚动会回到数字 的位置。
除此之外,进行以上操作时,需满足以下条件:
第一次选择区间时允许任意选定区间 接下来每次选择的区间,必须包含上一次选择的区间 例如对于一个初始状态为 的密码锁,可以通过以下步骤完成解锁:
① 选取 区间的滚轮,向下滚动。
② 选取 区间的滚轮,向下滚动。
③ 选取 区间的滚轮,向下滚动。
以下则是一些不符合规则的操作示例:
① 先选取 再选取 是不符合规则的,因为 区间不被 所包含。
② 先选取 再选取 是不符合规则的,原因同上。
你的目标是使用最少的操作次数,解锁给定的密码锁。
输入格式 第一行一个整数 ,表示共有 组数据,每组数据格式如下:
第一行两个整数 分别表示密码锁位数和每个滚轮的面数;
第二行 个整数,对应从左到右每一位滚轮上的数字 。
输出格式 共 行,对于每组数据,输出最少需要几次操作才能解锁。
测试样例 输入样例 #1 4 6 2 1 1 0 1 0 1 6 2 0 1 0 0 1 1 6 10 1 1 2 2 3 3 6 10 1 1 9 9 1 1 输出样例 #1 3 2 3 3