P17359 [ECNA 2024] Leapfrog Encryption

题目描述

我们设计了一种新的加密方法,称为“跳蛙加密”。这是一种基于密钥的加密方案,字母密钥规定明文中的字母如何放入密文。具体步骤如下: 1. 删除明文中的所有非字母字符,并把剩余字母全部转换为小写。 2. 把密钥中的每个字母转换成“它在字母表中的位置加 $1$”。因此 `a` 转换为 $2$,`b` 转换为 $3$,依此类推。由此得到数列 $d_1,d_2,\ldots,d_n$,其中 $n$ 是密钥长度。 3. 从左向右扫描密文位置,把明文开头的字母依次放入每第 $d_1$ 个位置,直到密文中不再有这样的可用位置。密文长度等于明文字母数。例如,若 $d_1=5$,明文第一个字母放在密文第 $5$ 位,第二个放在第 $10$ 位,依此类推;密文位置从 $1$ 开始编号。 4. 使用 $d_2$ 重复这一过程,但改为从右向左扫描密文,并且只计数空位置,跳过已经填入字母的位置。 5. 继续依次使用 $d_3,d_4,\ldots$,每一趟都交替改变扫描方向。 6. 使用完 $d_n$ 后,如果明文仍有剩余字母,就按与上一趟相反的方向把它们依次填入所有空位置。这等价于再使用 $d_{n+1}=1$。 例如,明文为 `Send more monkeys!`、密钥为 `bea` 时,加密过程如下: | 当前步骤 | 密文位置 | | :-- | :-- | | `b` $\to 3$,从左向右 | `_ _ s _ _ e _ _ n _ _ d _ _ m` | | `e` $\to 6$,从右向左 | `_ _ s _ _ e o _ n _ _ d _ _ m` | | `a` $\to 2$,从左向右 | `_ r s _ e e o _ n m _ d o _ m` | | 最后一趟,从右向左 | `s r s y e e o e n m k d o n m` | 至于解密该怎么做……嘿,你知道吗?这个就留给你自己推导吧。

输入格式

第一行包含两个字符串 $t,k$。$t$ 为 `E` 或 `D`,分别表示执行加密或解密;$k$ 是只含小写字母的密钥,长度在 $1$ 到 $100$ 之间。 第二行也是最后一行,包含要加密的明文(若 $t$ 为 `E`)或要解密的密文(若 $t$ 为 `D`)。该字符串非空,长度不超过 $2000$。密文只含小写字母;明文还可以含大写字母、数字、标点和空格,这些字符都计入字符串长度,并保证明文至少含一个字母。

输出格式

输出加密或解密后的文本。输出只能包含小写字母。