ZOJ 3713 In 7-bit
2015-09-06 13:41
393 查看
Very often, especially in programming contests, we treat a sequence of non-whitespace characters as a string. But sometimes, a string may contain whitespace characters or even be empty. We can have such strings quoted and escaped to handle these cases. However,
a different approach is putting the length of the string before it. As most strings are short in practice, it would be a waste of space to encode the length as a 64-bit unsigned integer or add a extra separator between the length and the string. That's why
a 7-bit encoded integer is introduced here.
To store the string length by 7-bit encoding, we should regard the length as a binary integer. It should be written out by seven bits at a time, starting with the seven least-significant (i.e. 7 rightmost) bits. The highest (i.e. leftmost) bit of a byte
indicates whether there are more bytes to be written after this one. If the integer fits in seven bits, it takes only one byte of space. If the integer does not fit in seven bits, the highest bit is set to 1 on the first byte and written out. The integer is
then shifted by seven bits and the next byte is written. This process is repeated until the entire integer has been written.
With the help of 7-bit encoded integer, we can store each string as a length-prefixed string by concatenating its 7-bit encoded length and its raw content (i.e. the original string).
Input
There are multiple test cases. The first line of input is an integer T indicating the number of test cases.
Each test case is simply a string in a single line with at most 3000000 characters.
Output
For each test case, output the corresponding length-prefixed string in uppercase hexadecimal. See sample for more details.
Sample Input
Sample Output
以16进制输出长度 紧接着把串改成16进制
a different approach is putting the length of the string before it. As most strings are short in practice, it would be a waste of space to encode the length as a 64-bit unsigned integer or add a extra separator between the length and the string. That's why
a 7-bit encoded integer is introduced here.
To store the string length by 7-bit encoding, we should regard the length as a binary integer. It should be written out by seven bits at a time, starting with the seven least-significant (i.e. 7 rightmost) bits. The highest (i.e. leftmost) bit of a byte
indicates whether there are more bytes to be written after this one. If the integer fits in seven bits, it takes only one byte of space. If the integer does not fit in seven bits, the highest bit is set to 1 on the first byte and written out. The integer is
then shifted by seven bits and the next byte is written. This process is repeated until the entire integer has been written.
With the help of 7-bit encoded integer, we can store each string as a length-prefixed string by concatenating its 7-bit encoded length and its raw content (i.e. the original string).
Input
There are multiple test cases. The first line of input is an integer T indicating the number of test cases.
Each test case is simply a string in a single line with at most 3000000 characters.
Output
For each test case, output the corresponding length-prefixed string in uppercase hexadecimal. See sample for more details.
Sample Input
3 42 yukkuri shiteitte ne!!! https://en.wikipedia.org/wiki/Answer_to_Life,_the_Universe,_and_Everything#Answer_to_the_Ultimate_Question_of_Life.2C_the_Universe_and_Everything_.2842.29
Sample Output
023432 1779756B6B75726920736869746569747465206E65212121 9A0168747470733A2F2F656E2E77696B6970656469612E6F72672F77696B692F416E737765725F746F5F4C6966652C5F7468655F556E6976657273652C5F616E645F45766572797468696E6723416E737765725F746F5F7468655F556C74696D6174655F5175657374696F6E5F6F665F4C6966652E32435F7468655F556E6976657273655F616E645F45766572797468696E675F2E323834322E3239
以16进制输出长度 紧接着把串改成16进制
#include <iostream> #include <cstring> #include <cstdio> using namespace std; char a[3000008]; int main() { int t,i,l,sb,ll; cin>>t; getchar(); while(t--) { gets(a); l=strlen(a); ll=l; if(ll==0) { printf("00"); } else { while(l) { sb=l%128; l/=128; if(l) { sb+=128; } printf("%02X",sb); } } for(i=0; i<ll; i++) { printf("%02X",a[i]); } printf("\n"); } return 0; }
相关文章推荐
- hdu4901The Romantic Hero dp
- java在继承中父类的成员变量是否会被子类所覆盖
- xpath 参考
- Qt QStringList的简单使用方法
- 理解maven的核心概念
- java线程
- hdu4906Our happy ending 状压dp
- hdu4870Rating 概率dp
- Unity3d通用工具类之解压缩文件
- 理解maven的核心概念
- HDU 3234 - Exclusive-OR(并查集)
- 字符串按照单词逆序的两种实现
- Oracle GoldenGate 简介 数据库同步 异地复制方案
- Lua5.0 语法分析
- UI初级之界面特殊处理技巧一
- 计算机底层是如何访问显卡的?
- poj1113Wall【凸包】
- 程序员的自我修养
- Linux使用dd命令测试硬盘读写速度
- 简单电话本程序