题单练习 进阶数论

A6254 | Intruder Outsmarting

时间限制1s
内存限制128MB
通过 / 提交0/0

题目描述

Amiria 是一个谨慎的互联网用户,因此她正在为账户设置双重认证。她使用一种特殊的安全密钥作为额外防护,以智胜那些可能想要窃取它的入侵者。Amiria 的安全密钥需要一个激活码。要输入这个激活码,必须将其放置在带有数字的转轮上,类似于密码挂锁。

Amiria 的安全密钥由 $\mathbf{W}$ 个转轮组成。每个转轮上按顺序印有数字 1 到 $\mathbf{N}$。通过一次转轮旋转,用户可以将当前显示的数字移动到下一个或上一个数字。转轮上的数字是循环的,这意味着 $\mathbf{N}$ 的下一个数字是 1,而 1 的前一个数字是 $\mathbf{N}$。

这里没有隐藏密码。要激活 Amiria 的安全密钥,需要调整转轮,使得显示的数字序列是回文的。也就是说,数字序列从左到右和从右到左读起来是一样的。为了减慢入侵者的速度,Amiria 对安全密钥进行了设置,使得转轮只能以 $\mathbf{D}$ 的增量旋转。也就是说,在一次操作中,当前显示数字 $x$ 的转轮可以调整为显示 $x - \mathbf{D}$ 或 $x + \mathbf{D}$,并应用适当的循环调整。具体来说,如果 $x - \mathbf{D} 1$,则操作后实际显示的数字是 $x - \mathbf{D} + \mathbf{N}$;如果 $x + \mathbf{D} \mathbf{N}$,则实际显示的数字是 $x + \mathbf{D} - \mathbf{N}$。

Amiria 想检查这个系统会如何减慢试图使用她安全密钥的入侵者。给定转轮的数量和每个转轮当前显示的数字,找到使显示的数字序列成为回文所需的最少操作次数,或者报告这是不可能的。

输入格式

输入的第一行给出测试用例的数量 $\mathbf{T}$。随后是 $\mathbf{T}$ 个测试用例。每个测试用例包含两行。测试用例的第一行包含 3 个整数 $\mathbf{W}$、$\mathbf{N}$ 和 $\mathbf{D}$:分别表示 Amiria 安全密钥中的转轮数量、每个转轮上显示的数字数量,以及 Amiria 设置的固定增量。测试用例的第二行包含 $\mathbf{W}$ 个整数 $\mathbf{X}_{1}, \mathbf{X}_{2}, \ldots, \mathbf{X}_{\mathbf{W}}$,其中 $\mathbf{X}_{i}$ 是从左到右第 $i$ 个转轮当前显示的数字。

输出格式

对于每个测试用例,输出一行 Case #x: y,其中 $x$ 是测试用例编号(从 1 开始),$y$ 是使显示的数字序列成为回文所需的最少操作次数。如果无法通过允许的操作使数字序列成为回文,则 $y$ 应为 IMPOSSIBLE

输入输出样例

输入 #1
3
5 5 4
1 4 5 5 4
3 4 2
3 4 3
2 4 2
1 4
输出 #1
Case #1: 3
Case #2: 0
Case #3: IMPOSSIBLE
C++ 编辑器
输入
输出