HDU 5237 Base64
Base64
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 245 Accepted Submission(s): 119
Here is an example of the note in Chinese Passport.
The Ministry of Foreign Affairs of the People's Republic of China requests all civil and military authorities of foreign countries to allow the bearer of this passport to pass freely and afford assistance in case of need.
When encoded by \texttt{Base64}, it looks as follows
VGhlIE1pbmlzdHJ5IG9mIEZvcmVpZ24gQWZmYWlycyBvZiB0aGUgUGVvcGxlJ3MgUmVwdWJsaWMgb2Yg
Q2hpbmEgcmVxdWVzdHMgYWxsIGNpdmlsIGFuZCBtaWxpdGFyeSBhdXRob3JpdGllcyBvZiBmb3JlaWdu
IGNvdW50cmllcyB0byBhbGxvdyB0aGUgYmVhcmVyIG9mIHRoaXMgcGFzc3BvcnQgdG8gcGFzcyBmcmVl
bHkgYW5kIGFmZm9yZCBhc3Npc3RhbmNlIGluIGNhc2Ugb2YgbmVlZC4=
In the above text, the encoded result of \texttt{The} is \texttt{VGhl}. Encoded in ASCII, the characters \texttt{T}, \texttt{h}, and \texttt{e} are stored as the bytes84
and 101
which are the 8
binary values 01010100
and 01100101
These three values are joined together into a 24-bit string, producing
010101000110100001100101
Groups of 6
bits (6
bits have a maximum of 2
different binary values) are converted into individual numbers from left to right (in this case, there are four numbers in a 24-bit string), which are then converted into their corresponding Base64 encoded characters. The Base64 index table is
0123456789012345678901234567890123456789012345678901234567890123
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
In the above example, the string 010101000110100001100101
is divided into four parts 010101
and 100101
and converted into integers 21,6,33
and 37
Then we find them in the table, and get V, G, h, l.
When the number of bytes to encode is not divisible by three (that is, if there are only one or two bytes of input for the last 24-bit block), then the following action is performed:
Add extra bytes with value zero so there are three bytes, and perform the conversion to base64. If there was only one significant input byte, only the first two base64 digits are picked (12 bits), and if there were two significant input bytes, the first three
base64 digits are picked (18 bits). '=' characters are added to make the last block contain four base64 characters.
As a result, when the last group contains one bytes, the four least significant bits of the final 6-bit block are set to zero; and when the last group contains two bytes, the two least significant bits of the final 6-bit block are set to zero.
For example, base64(A) = QQ==, base64(AA) = QUE=.
Now, Mike want you to help him encode a string for
k
times. Can you help him?
For example, when we encode A for two times, we will get base64(base64(A)) = UVE9PQ==.
T
denoting the number of test cases.
In the following T
lines, each line contains a case. In each case, there is a number
k(1≤k≤5)
and a string s
only contains characters whose ASCII value are from
33
to 126
visible characters). The length of s
is no larger than 100
2
1 Mike
4 Mike
Case #1: TWlrZQ==
Case #2: Vmtaa2MyTnNjRkpRVkRBOQ==
题意:将3个8位变成4个6位。不足八位的时候补0,最后不足四位补=。求出k次变换后的结果
#include <bits/stdc++.h>
using namespace std;
const int N = 10005;
char e[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; //int main()
//{
// int k=11;
// for(int i=7;i>=0;i--)
// cout<<(k>>i&1);
// cout<<endl;
// //00001011
//
// k=(11<<8);
//
// for(int i=15;i>=0;i--)
// cout<<(k>>i&1);
// cout<<endl;
// //0000101100000000
//
// return 0;
//} void base64(char s[])
{
char t[N]={0};//要加一个对数组的初始化。
int l=strlen(s);
int p=0;
int a=0; int r=l%3; for(int i=0;i<l;i+=3)
{
int k=(((int)s[i])<<16)+(((int)s[i+1])<<8)+(int)(s[i+2]);//每次取三个字节
int cb=1; for(int j=0;j<24;j++)
{
a+=(k>>j&1)*cb;
cb<<=1;
if(j%6==5)
{
t[p++]=e[a];
a=0;
cb=1;
}
}
swap(t[p-1],t[p-4]);//4位字符是反的,比方AAA (100000101000001010000010)每6位一组后是BFUQ 倒过来后是QUFB 正常AAA应该是(010000010100000101000001)从左到右六个一组就是QUFB
swap(t[p-2],t[p-3]);
} if(r==1)
t[p-1]=t[p-2]='=';
if(r==2)
t[p-1]='='; memcpy(s,t,sizeof(char)*N);
} int main()
{
int cas, n;
scanf("%d", &cas);
char s[N];
for(int k = 1; k <= cas; ++k)
{
memset(s,0,sizeof(s));
scanf("%d%s", &n, s);
while(n--)
base64(s);
printf("Case #%d: %s\n", k, s);
}
return 0;
}
/*
0123456789012345678901234567890123456789012345678901234567890123
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
*/
HDU 5237 Base64的更多相关文章
- hdu 5237 Base64(模拟)
Base64 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Subm ...
- HDU 5237 Base64 模拟
题意: 输入一个明文串,输出\(k\)次\(Base64\)加密以后得到的串. 分析: 好像没什么Trick,直接模拟就行了. 注意:长度为\(3k+1\)的串,后面会有两个\(=\).长度为\(3k ...
- hdu 5237 二进制
很无聊的模拟题...mark几个有用的小程序: 字符->二进制ASCII码 string tobin(char c) { string t; ; i<; i++) { t=+)+t; c/ ...
- 数据结构:HDU 2993 MAX Average Problem
MAX Average Problem Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
- JS base64 加密和 后台 base64解密(防止中文乱码)
直接上代码 1,js(2个文件,网上找的) 不要觉的长,直接复制下来就OK //UnicodeAnsi.js文件 //把Unicode转成Ansi和把Ansi转换成Unicode function ...
- HDU 5734 Acperience
Acperience Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total ...
- hdu 3038(扩展并查集)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3038 题意:给出区间[1,n],下面有m组数据,l r v区间[l,r]之和为v,每输入一组数据,判断 ...
- Base64 JAVA后台编码与JS前台解码(解决中文乱码问题)
中文通过Java后台进行Base64编码后传到前台,通过JS进行Base64解码时会出现中文乱码的问题,被这个问题也是困扰了几天,使用jquery.base64.js只能转码非中文字符,经过搜集各种方 ...
- hdu 2461(AC) & poj 3695(TLE)(离散化+矩形并)
Rectangles Time Limit: 5000/4000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
随机推荐
- final使用方法
final的作用随着所修饰的类型而不同 1.final修饰类中的属性或者变量 不管属性是基本类型还是引用类型.final所起的作用都是变量里面存放的"值"不能变. 这个值,对 ...
- 【原生JS组件】javascript 运动框架
大家都知道JQuerry有animate方法来给DOM元素进行运动,CSS3中也有transition.transform来进行运动.而使用原生的Javascript来控制元素运动,须要写非常多运动的 ...
- js---18miniJquery
<html> <head> <title>jQuery test</title> </head> <body> <div ...
- 4. Brackets 前端编辑器试用
转自:https://blog.csdn.net/wuji3390/article/details/71170579 Brackets编辑器介绍 "一个现代的,开源的,了解网页设计的编辑器& ...
- Sparse Autoencoder(二)
Gradient checking and advanced optimization In this section, we describe a method for numerically ch ...
- Redis操作使用规范
Windows 64位操作系统 Redis 安装包(当前教程版本2.8.12) 百度经验:jingyan.baidu.com 方法/步骤 1 在D盘新建文件夹[redis],右键解压Redis Z ...
- uname 命令
uname -p 显示系统的芯片类型.如,PowerPC uname -r 显示操作系统的版本号 uname -s 显示系统名称.例如,AIX uname -n 显示节点名称 uname -a 显示系 ...
- JavaScript翻译成Java
这两天公司有一个需求,将一段加密的JavaScript代码转换为JAVA版. JavaScript中的某一段代码: 前期查看了整个JavaScript代码,发现代码中,方法里面嵌套方法,各种不合规的变 ...
- let---bash中用于计算的工具
- SpringMVC框架中的异常解析器-ExceptionHandler和HandlerExceptionResolver
SpringMVC框架中,处理异常还是挺方便的,提供了一个异常解析器. 处理局部异常 @Controller public class AccessController { /** * 处理这个Con ...