点击打开链接(题目地址)。
题意:给你一个字符串是编码头,在给你一个二进制字符串。你要根据编码头来确定字符所对应的二进制,从而解析输入的二进制。
思路:模拟,关键是二进制也字符的映射(你可以发现二进制的编码和二进制一一对应,也和输入字符的编码一一对应)。
#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;
}