P12952 [GCJ Farewell Round #2] Intruder Outsmarting
题目描述
**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 \ 4 \ 5 \ 4 \ 5$,这是一个回文序列。具体操作为:对第一个和第四个转轮进行一次加法操作,对第五个转轮进行一次减法操作。无法用更少的操作使序列成为回文。
在样例 #2 中,序列已经是回文的,因此不需要任何操作。
在样例 #3 中,要使序列成为回文,两个数字必须相同。由于转轮只能以 2 的增量移动,而当前两个数字的奇偶性不同,因此无法实现。
**数据范围**
- $1 \leq \mathbf{T} \leq 100$。
- $1 \leq \mathbf{D} \leq \mathbf{N}-1$。
- 对所有 $i$,$1 \leq \mathbf{X}_{i} \leq \mathbf{N}$。
**测试集 1(4 分,可见判定)**
- $2 \leq \mathbf{W} \leq 5$。
- $2 \leq \mathbf{N} \leq 5$。
**测试集 2(10 分,可见判定)**
- $2 \leq \mathbf{W} \leq 1000$。
- $2 \leq \mathbf{N} \leq 10^{9}$。
翻译由 DeepSeek V3 完成