#1416. [ACSL] 2021-2022 Contest 2 Fibonacci cypher
[ACSL] 2021-2022 Contest 2 Fibonacci cypher
描述
使用 斐波那契密码(Fibonacci Cypher) 对给定消息进行编码。
斐波那契序列从两个非负整数开始,之后的每一项都是前两项之和。为了保证每一项都是唯一的数字,本题中使用的斐波那契序列定义为:
1, 2, 3, 5, 8, 13, …
斐波那契密码使用上述序列以及一个输入的 密钥(字母表中的一个小写字母)将一条消息编码为一系列整数。只要知道所使用的密钥,另一方就可以对编码结果进行解码。
对于消息中的每一个字符,按照以下步骤生成对应的整数:
-
找到与该字符位置相同索引的斐波那契数
(例如:输入字符串中的第 1 个字符使用斐波那契数 1,第 5 个字符使用斐波那契数 8)。 -
使用输入的密钥字母,在字母表中按步骤 1 得到的斐波那契数进行偏移,得到一个新的字母。
如果超出了字母表末尾,则从字母表开头继续循环。
(例如:若密钥为p,斐波那契数为 21,则得到的新字母为k。) -
将字符串中该字符的 ASCII 码与步骤 2 中得到的新字母的 ASCII 码相加,得到该字符的编码值。
示例
对于字符串 "ACSL c2" 和密钥字母 'h',编码过程如下所示:
-
第 1 个字符
- 斐波那契偏移量:1
h + 1 = i,i的 ASCII 值为 105'A'的 ASCII 值为 65- 计算:65 + 105 = 170
-
第 2 个字符
- 斐波那契偏移量:2
h + 2 = j,j的 ASCII 值为 106'C'的 ASCII 值为 67- 计算:67 + 106 = 173
-
第 3 个字符
- 斐波那契偏移量:3
h + 3 = k,k的 ASCII 值为 107'S'的 ASCII 值为 83- 计算:83 + 107 = 190
-
第 4 个字符
- 斐波那契偏移量:5
h + 5 = m,m的 ASCII 值为 109'L'的 ASCII 值为 76- 计算:76 + 109 = 185
-
第 5 个字符(空格)
- 斐波那契偏移量:8
h + 8 = p,p的 ASCII 值为 112- 空格的 ASCII 值为 32
- 计算:32 + 112 = 144
-
第 6 个字符
- 斐波那契偏移量:13
h + 13 = u,u的 ASCII 值为 117'c'的 ASCII 值为 99- 计算:99 + 117 = 216
-
第 7 个字符
- 斐波那契偏移量:21
h + 21 = c,c的 ASCII 值为 99'2'的 ASCII 值为 50- 计算:50 + 99 = 149
编码后的消息为:
170 173 190 185 144 216 149
输入输出格式
输入
共有 5 组数据。
每组数据包含两个值:
- 一个 小写英文字母,表示密钥;
- 一个 字符串,表示需要编码的消息。
消息长度不超过 30,且不包含双引号("),可以包含键盘上可输入的任意字符。
输出
对于每一组输入,输出一行整数,表示对应的编码结果。
各整数之间用 单个空格 分隔。