#P1107. W's Cipher
W's Cipher
描述
怪异的沃利(Weird Wally)的无线小部件公司(Wireless Widgets, Inc.)生产各种各样的小型无线、具备网络功能的设备,范围从狗项圈到铅笔,再到钓鱼浮标。所有这些设备的内存都非常小。像高级加密标准(AES)的候选算法 Rijndael 这样的加密算法,虽然被证明是安全的,但无法在如此小的内存中运行。为了给这些设备的传输提供一定的安全性,WWWW 公司使用了以下你需要实现的加密算法。
加密一条消息需要三个整数密钥 、 和 。字母 构成第一组, 构成第二组,其他所有字母( 和下划线 _
)构成第三组。在每组中,消息里的字母向左旋转 个位置。每组的旋转都是独立于其他两组进行的。解密消息则意味着在每组中向右旋转 个位置。
考虑消息 the_quick_brown_fox
,使用 值分别为 、 和 进行加密。加密后的字符串是 _icuo_bfnwhoq_kxert
。下面的图展示了三个字符组中每个组的一个字符的解密(向右旋转)过程。

观察第一组字母 ,我们看到 {i,c,b,f,h,e}
出现在加密消息中的位置 {2,3,7,8,11,17}
。在向右旋转 之后,这些位置包含的字母是 {h,e,i,c,b,f}
。下面的表格展示了在第一组进行所有旋转,然后在第二组进行所有旋转,最后在第三组进行所有旋转后得到的中间字符串。在一个组中旋转字母不会改变其他组中的任何字母。

所有输入字符串只包含小写字母和下划线(_
)。每个字符串最长为 个字符。 都是 到 范围内的正整数。
输入
输入由一个或多个加密消息的信息组成。每个问题都以包含 、 和 的一行开始,紧接着是包含加密消息的一行。当一行中所有密钥值都为 时,表示输入结束。
输出
对于每个加密消息,输出是包含解密后字符串的单行内容。
输入示例
2 3 1
_icuo_bfnwhoq_kxert
1 1 1
bcalmkyzx
3 7 4
wcb_mxfep_dorul_eov_qtkrhe_ozany_dgtoh_u_eji
2 4 3
cjvdksaltbmu
0 0 0
输出示例
the_quick_brown_fox
abcklmxyz
the_quick_brown_fox_jumped_over_the_lazy_dog
ajsbktcludmv
来源
2001 年美国中中部地区竞赛