题意,开始会有一串字符,是按照我们的二进制编码来的,如
TNM AEIOU
0010101100011
1010001001110110011
11000
然后T 对应的就是0, N对应的就是00,M 对应 01 ,‘ ’对应的是10,A 对应的是000以下类推
然后下面会出现一串编码,前三个数字代表len的长度
如:
001 表示长度为1,然后后面0 ,1(遇到(1<
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int M[10][1<<9]//因为一开始我们的字符串中的每一个字符都代表着一个二进制数,所以将它们存进一个数组里更方便,M[二进制的长度][二进制代表的值];
int read()
{
for(;;)
{
int c=getchar();
if(c!='\n'&&c!='\r') return c;
}
}
int readcode()
{
memset(M,0,sizeof(M));
M[1][0]=read();//读入第一个有效字符
for(int i=2;i<=7;i++)
for(int j=0;j<(1<<i)-1;j++)
{
int c=getchar();
if(c=='\n'||c=='\r') return 1;
if(c==EOF) return 0;
M[i][j]=c;
}
return 1;
}
int read1(int len)//得到二进制的值
{
int d=0;
while(len--)
{
d=d*2+read()-'0';
}
return d;
}
int main()
{
while(readcode())
{
for(;;)//无条件循环
{
int len=read1(3);
if(len==0)
break;
for(;;)
{
int a=read1(len);
if(a==(1<<len)-1) break;
printf("%c",M[len][a]);
}
}
printf("\n");
}
return 0;
}
像什么<<,二进制的运算一定要打括号啊啊啊啊。