U429540 Base 64

题目背景

小 G 喜欢打 phigros。

题目描述

进行Base 64编码和解码是非常简单的。要编码一个字符串,首先需要将字符串变为二进制形式,然后每 $6$ 位分隔一个二进制数,再用对应字符替换二进制数。 描述得很抽象?举个具体例子: 对字符串 $\text{kkksc03}$ 进行编码: 1. 将字符串转换为二进制: $$01101011\;01101011\;01101011\;01110011\;01100011\;00110000\;00110011$$ 2. 将分割方式改为 $6$ 位一分割:(最后一段若不足 $6$ 位则补 $0$) $$011010\;110110\;101101\;101011\;011100\;110110\;001100\;110000\;001100\;11\textcolor{red}{0000}$$ 3. 按照字符编码将二进制改为对应字符(对应关系见下): $$\text{a2trc2MwMw}$$ 4. 若长度不为 $4$ 的倍数,在末尾补上 $\text{=}$ 占位: $$\text{a2trc2MwMw==}$$ 若要解码,按照以上顺序反着来就行了。 下表为所有base 64字符串可能拥有的字符以及它对应的二进制代码: | 二进制代码(已转换为十进制) | 对应字符 | | :----------: | :----------: | | $0 \sim 25$ | $\text{A} \sim \text{Z}$ | | $26 \sim 51$ | $\text{a} \sim \text{z}$ | | $52 \sim 61$ | $\text{0} \sim \text{9}$ | | $62$ | $\text{+}$ | | $63$ | $\text{/}$ | | $\text{N/A}$ | $\text{=}$ | (你就当ASCII码就行了)

输入格式

第一行一个字符串,必定为`decode`或`encode`。`decode`代表解码,`encode`代表编码。 第二行一个字符串,为待解码或待编码的字符串。保证字符串中只存在ASCII可见字符。

输出格式

若输入的第一行为`encode`,直接输出编码后的字符串即可。 若输入的第一行为`decode`,则: - 若字符串格式有误(如包含其他特殊字符如 $\text{-}$ ),输出`Presentation Error.`。 - 否则,若解码出的字符串包含非ASCII可见字符(如`\n`、`\a`、空格等特殊字符),输出`Memory Limit Exceed.`。 - 否则,输出解码后的字符串。

说明/提示

【数据范围】 **本题采用捆绑测试。** 对于 $100 \%$ 的数据,若输入第一行为`decode`,则输入的第二行长度为 $4$ 的倍数。保证第二行字符串长度 $ \le 50$。 Subtask $0$($75$ pts):无特殊限制。 Subtask $1$($25$ pts):加密前的字符串为Phigros曲名。 [需要什么说明吗?](https://www.toolhelper.cn/EncodeDecode/Base64)