#P16875. [GKS 2022 #B] Unlock the Padlock
[GKS 2022 #B] Unlock the Padlock
题目描述
假设你有一个密码锁,它由 个拨盘组成,初始时设置为随机组合。密码锁的拨盘大小为 ,即每个拨盘的值可以是 到 (包含两端),并且可以向上或向下旋转。拨盘从左到右排列,最左和最右的位置分别为 和 。将所有的拨盘值设为 即可打开密码锁。
你可以执行零次或多次以下操作:
- 选择任意区间 ,满足 ,并将该区间内的所有拨盘同时向上或向下旋转。向上旋转会使区间 中每个拨盘的值增加 ,向下旋转则减少 。注意,值为 的拨盘向上旋转后会变成 ,值为 的拨盘向下旋转后会变成 。
操作序列必须满足以下条件:
- 第 次操作选择的区间 必须完全包含在第 次操作选择的区间 之内,即 。第一次操作 可以任意选择。
解锁初始组合为 的密码锁的有效操作序列示例:
- 将区间 向下旋转。
- 将区间 向下旋转。
- 将区间 向下旋转。
以下是一些不能执行的操作:
- 在 之后旋转 ,因为 没有完全包含在 中(不满足 ,其中 ,)。
- 在 之后旋转 。
你的目标是输出使密码锁所有拨盘归零所需的最少有效操作次数。
输入格式
输入的第一行包含测试用例的数量 。接下来有 个测试用例。
每个测试用例由 行组成。
每个测试用例的第一行包含 个整数 和 ,分别表示密码锁的拨盘数量和拨盘的大小。
每个测试用例的第二行包含 个整数 ,其中第 个整数表示初始组合中第 个拨盘的值。
输出格式
对于每个测试用例,输出一行,格式为 Case #x: y,其中 是测试用例编号(从 开始), 是解锁密码锁所需的最少操作次数。
2
6 2
1 1 0 1 0 1
6 2
0 1 0 0 1 1
Case #1: 3
Case #2: 2
2
6 10
1 1 2 2 3 3
6 10
1 1 9 9 1 1
Case #1: 3
Case #2: 3
提示
在样例 #1 中,解锁密码锁所需的最少操作次数为 。可以使用以下操作解锁:
- 将区间 向下旋转。
- 将区间 向下旋转。
- 将区间 向下旋转。
在样例 #2 中,解锁密码锁所需的最少操作次数为 。可以使用以下操作解锁:
- 将区间 向上旋转。
- 将区间 向下旋转。
限制条件
。
对于所有 ,。
测试集 1
。
。
测试集 2
。
。
测试集 3
。
。
翻译由 DeepSeek V4 Pro 完成