题目链接
把编码理解成二进制,用(len,value)这个二元组来表示一个编码,其中len是编码长度,value是编码对应的十进制值.用code[len][value]保存这个编码所对应的字符。
#include<cstdio>
#include<cstring>
int code[8][1<<8];
inline int readchar()//跨行读字符
{
for(;;)
{
int ch=getchar();
if(ch!='\n'&&ch!='\r')return ch;//一直读到非换行符为止
}
}
inline int readint(int c)//读取c位二进制字符,并转化为十进制整数
{
int v=0;
while(c--)v=v*2+readchar()-'0';
return v;
}
inline int readcodes()//读取编码
{
memset(code,0,sizeof(code));//清空数组
code[1][0]=readchar();//直接调到下一行开始读取。如果输入已经结束,会读到EOF
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;
}
}
return 1;
}
int main()
{
//freopen("in.txt","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;
}