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)