您的位置:首页 > 其它

UVA213----Message Decoding

2016-01-23 14:32 337 查看
由于字符比较少,只有7个,再将每个二进制转换成数值的形式,存到数组的位置。

如样例2  解码key为"S#**\"

code[1][0]对应编码'0'存的字符为'$'       code[2][0]对应编码'00'存的字符为'#'

code[2][1]对应编码'01'存的字符为'*'      code[2][2]对应编码'10'存的字符为'*'

code[3][0]对应编码'000'存的字符为'\'

第一个位置放长度,第二个放对应编码。

#include<stdio.h>
#include<algorithm>
#include<cmath>
#include<string.h>
using namespace std;
int readchar()
{
for(;;){
int ch=getchar();
if(ch!='\n'&&ch!='\r') return ch;
}
}

int readint(int c)//长度为c
{
int v=0;
while(c--)
{
v=v*2+readchar()-'0';
}
return v;//转换为数值
}

int code[8][1<<8];
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;
}
}
return 1;
}

int main()
{
while(readcodes()){
for(;;){
int len=readint(3);
if(len==0) break;//对应000
for(;;){
int v=readint(len);
if(v==(1<<len)-1) break;//对应几个1
putchar(code[len][v]);
}
}
putchar('\n');
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: