#1102. Base64 decoder

Base64 decoder

题目背景

又是一年毕业季,我们的学长学姐们即将离开我们的校园。在离开之前,他们多多少少都会因为毕业论文或毕业设计影响。为了减少压力,『 winterl 』 现在就开始写毕业设计了,他现在需要完成毕业设计(校赛管理系统)的数据传输功能。为了防止数据在传输的过程中被黑客窃取,『 winterl 』 专门学习了密码学,打算使用 UTF-8 编码的 Base64 加密传输。

题目描述

现在,你需要帮助 『 winterl 』 对使用 Base64 的加密内容 ss 进行解密。具体解密流程如下:

  1. 去除填充​​:先去掉末尾的 =1122 个)

  2. ​字符反查​​:将每个字符反向映射为 66 位二进制值

  3. ​位合并​​:每 4466 位二进制值合并为 3388 位二进制值(也就是 33 个字节)

    若不够 2424 个就舍弃无法变成字节的,如 000000 000111 舍弃末尾 0111

  4. ​ASCII还原​​:将字节转为原始字符

Base64 字符表: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/

输入格式

第一行,一个正整数 T(T103)T (T \leq 10^3) ,表示每个测试点有 TT 组测试样例

对于每组测试样例

仅一行字符串 s(0<s104)s(0 < |s| \leq 10^4) ,表示题目给定的Base64 的加密内容

其中 s|s| 意为字符串 ss 的长度

输入保证加密内容前的是 ASCII 可见字符(空格除外)。

输出格式

一共 TT 行,对于每行输出,打印每组测试样例的解码结果

样例输入输出

1
aGVsbG8gd29ybGQ=
hello world
10
SQ==
bG92ZWQ=
dG8=
dGhl
bW9vbg==
YW5k
YmFjaw==
YWdhaW4=
Lg==
SSBsb3ZlZCB5b3UgdG8gdGhlIG1vb24gYW5kIGJhY2sgYWdhaW4u
I
loved
you
to
the
moon
and
back
again
.
I loved you to the moon and back again.

样例解释

对于样例 11

  1. 去除填充aGVsbG8gd29ybGQ

  2. ​字符反查​011010 000110 010101 101100 011011 000110 111100 100000 011101 110110 111101 110010 011011 000110 010000

  3. 位合并01101000 01100101 01101100 01101100 01101111 00100000 01110111 01101111 01110010 01101100 01100100 舍弃多余内容

  4. ​ASCII还原​​: h e l l o w o r l d

附录(Base64字符反向映射表)

字符 反向映射值 字符 反向映射值 字符 反向映射值 字符 反向映射值
A 000000 B 000001 C 000010 D 000011
E 000100 F 000101 G 000110 H 000111
I 001000 J 001001 K 001010 L 001011
M 001100 N 001101 O 001110 P 001111
Q 010000 R 010001 S 010010 T 010011
U 010100 V 010101 W 010110 X 010111
Y 011000 Z 011001 a 011010 b 011011
c 011100 d 011101 e 011110 f 011111
g 100000 h 100001 i 100010 j 100011
k 100100 l 100101 m 100110 n 100111
o 101000 p 101001 q 101010 r 101011
s 101100 t 101101 u 101110 v 101111
w 110000 x 110001 y 110010 z 110011
0 110100 1 110101 2 110110 3 110111
4 111000 5 111001 6 111010 7 111011
8 111100 9 111101 + 111110 / 111111