#P17359. [ECNA 2024] Leapfrog Encryption
[ECNA 2024] Leapfrog Encryption
题目描述
我们设计了一种新的加密方法,称为“跳蛙加密”。这是一种基于密钥的加密方案,字母密钥规定明文中的字母如何放入密文。具体步骤如下:
-
删除明文中的所有非字母字符,并把剩余字母全部转换为小写。
-
把密钥中的每个字母转换成“它在字母表中的位置加 ”。因此
a转换为 ,b转换为 ,依此类推。由此得到数列 ,其中 是密钥长度。 -
从左向右扫描密文位置,把明文开头的字母依次放入每第 个位置,直到密文中不再有这样的可用位置。密文长度等于明文字母数。例如,若 ,明文第一个字母放在密文第 位,第二个放在第 位,依此类推;密文位置从 开始编号。
-
使用 重复这一过程,但改为从右向左扫描密文,并且只计数空位置,跳过已经填入字母的位置。
-
继续依次使用 ,每一趟都交替改变扫描方向。
-
使用完 后,如果明文仍有剩余字母,就按与上一趟相反的方向把它们依次填入所有空位置。这等价于再使用 。
例如,明文为 Send more monkeys!、密钥为 bea 时,加密过程如下:
| 当前步骤 | 密文位置 |
|---|---|
b ,从左向右 |
_ _ s _ _ e _ _ n _ _ d _ _ m |
e ,从右向左 |
_ _ s _ _ e o _ n _ _ d _ _ m |
a ,从左向右 |
_ 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 |
至于解密该怎么做……嘿,你知道吗?这个就留给你自己推导吧。
输入格式
第一行包含两个字符串 。 为 E 或 D,分别表示执行加密或解密; 是只含小写字母的密钥,长度在 到 之间。
第二行也是最后一行,包含要加密的明文(若 为 E)或要解密的密文(若 为 D)。该字符串非空,长度不超过 。密文只含小写字母;明文还可以含大写字母、数字、标点和空格,这些字符都计入字符串长度,并保证明文至少含一个字母。
输出格式
输出加密或解密后的文本。输出只能包含小写字母。
E bea
Send more monkeys!
srsyeeoenmkdonm
D bea
srsyeeoenmkdonm
sendmoremonkeys
D zyxwvutsrqponmlkjihgfedcba
lafogrpe
leapfrog