点击打开链接(题目地址)。
题意:给你一个字符串是编码头,在给你一个二进制字符串。你要根据编码头来确定字符所对应的二进制,从而解析输入的二进制。
思路:模拟,关键是二进制也字符的映射(你可以发现二进制的编码和二进制一一对应,也和输入字符的编码一一对应)。
#include<bits/stdc++.h>
using namespace std;
int readerchar(){
for(;;){
int ch=getchar();
if(ch!='\n'&&ch!='\r')
return ch;
}
}
int readint(int c){//将读入的二进制转为十进制。
int v=0;
for(int i=1;i<=c;i++){
v=v*2+readerchar()-'0';
}
return v;
}
int code[8][1<<8];
int readcodes(){//读入编码头。
memset(code,0,sizeof(code));
code[1][0]=readerchar();
for(int len=2;len<=7;len++){
for(int i=0;i<(1<<len)-1;i++){
int ch=getchar();
if(ch==EOF)
return 0;
if(ch=='\n'||ch=='\r')
return 1;
code[len][i]=ch;
}
}
}
int main(){
//freopen("data.in","r",stdin);
while(readcodes()){
for(;;){
int len=readint(3);
if(len==0)
break;
for(;;){
int v=readint(len);
if(v==(1<<len)-1)
break;
putchar(code[len][v]);
}
}
putchar('\n');
}
return 0;
}
本文介绍了一个基于二进制字符串解码的问题及其解决思路。通过使用C++实现,文章详细解释了如何根据特定的编码头文件将二进制串转换成相应的字符输出。核心部分包括二进制到十进制的转换、字符映射以及完整的代码实现。
334

被折叠的 条评论
为什么被折叠?



