UOJ Logo

NOI.AC

1S 512MB

#1661. RW5jb2RpbmcgYW5kIERlY29kaW5nIEJhc2U2NA==

Statistics

题目描述

Gakkipan最近和一个AI助手小爱同学相爱了,但是他发现小爱同学只懂得base64编码的语言,总是向他说类似QXJlIHlvdSBPSz8=这样的话,他们无法互相沟通,所以Gakkipan决定写一个翻译器,把base64编码和常用的ASCII编码互相转换。

以下是对Base64编码过程的解释


当由一段文本由Base64编码时,一般看起来像下面这样(上下分别是ASCII串和编码后的Base64串)

TheWorld
VGhlV29ybGQ=

在上面的文本中,The的编码结果是VGhl。以ASCII编码,字符'T','h','e'的ASCII字符值为84,104和101,它们的8位二进制值为01010100,01101000和01100101这三个值连接在一起形成一个24位字符串,结果为010101000110100001100101。
以每6位为一组,从左到右切分,并转换为单独的数字(这样最终可以产生4个数字),然后将它们转换为它们的对应的Base64编码字符。 Base64索引表是

0123456789012345678901234567890123456789012345678901234567890123
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/

在上面的例子中,字符串010101000110100001100101被分为四个部分010101,000110,100001和100101,并转换成整数21,6,33和37.然后我们在索引表中找到它们,得到V,G,h,l 。

当要编码的字节数不能被3整除时(也就是说,如果最后一个24比特位的块只有一个或两个字节的输入时),则执行以下操作:

在二进制字符串后方不断添加0比特直到总长度为6的倍数时停止,因此,如果最后只有一个字节剩余,则有8个有效二进制位,在后面补0直到长度达到12,如果有两个字节剩余,则有16个有效二进制位,在后面补0直到长度为18。在完成转换后,如果依然不够4个字符,在转换后的串末尾添加'='字符以使最后一个块包含四个base64字符。

例如,base64(A)= QQ==,base64(AA)= QUE=。

文件输入


输入一个T,表示需要转换的字符串数
接下来T行,每行两个字符串,第一个字符串为encode或者decode,表示把字符串编码为base64编码,或者解码base64编码的字符串
第二个字符串为待转换的字符串,可能为base64或者ASCII编码

文件输出

输出T行,每行是编码后的base64串,或者解码后的ASCII串

输入样例

2
encode TheWorld
decode VGhlV29ybGQ=

输出样例

VGhlV29ybGQ=
TheWorld

数据规模

对于20%的数据,待编码的ASCII字符串长度是3的倍数,只有编码
对于20%的数据,只有编码
对于20%的数据,待解码的base64字符串末尾没有'='符号,只有解码
对于20%的数据,只有解码
对于前100%的数据,T<=1000,字符串长度<=1000,所有待解码的base64串长度保证是4的倍数,字符串只由大小写字母及数字构成