此题用以纪念————第一次被Finals打倒在地上瑟瑟发抖的代某
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <time.h>
#include <ctype.h>
#include <queue>
#include <stack>
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;
int code[8][1<<8];
int readchar()
{//一个一个跨行读取
for(;;)
{
int ch = getchar();
if(ch != '\n' && ch != '\r')// \r回车
{
return ch;
}
}
}
int readint(int c)
{//把这一串01001换成十进制 从高拆到低 c is length
int v = 0;
while(c--)
{
v = v * 2 + readchar() - '0';
}
return v;
}
int readcodes()
{
memset(code, 0, sizeof code);
code[1][0] = readchar();//先读第一个 用这函数略去多组的开头换行
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;//不是上面那两个if 那你肯定是我在找的编码头
}//len 长度 i 对应的二进制所对应的十进制
}
return 1;
}
int main()
{
while(readcodes())//编码头读到code[][]里面去
//printcodes();
{
for(;;)
{//这是一路读 一路输出
int len = readint(3);//括号里的是二进制化十进制的二进制数长度
if(!len)
{//000 收尾
break;
}
//printf("%d\n",len);
for(;;)
{
int v = readint(len);
//printf("%d\n",v);
if(v == (1 << len) - 1)//最后111111...了就读完了
{
break;
}
putchar(code[len][v]);//读一组输出一个码
}
}
putchar('\n');
}
return 0;
}


京公网安备 11010502036488号