UVA213----Message Decoding

来源:互联网 发布:运动数据记录器 编辑:程序博客网 时间:2024/06/05 15:16

由于字符比较少,只有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;}




0 0
原创粉丝点击