UVa 213:Message Decoding

Posted xietx1995

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UVa 213:Message Decoding相关的知识,希望对你有一定的参考价值。

题目传送门:https://cn.vjudge.net/problem/UVA-213

0, 00, 01, 10, 000, 001, 010, 011, 100, 101, 110, 0000, 0001, … , 1011, 1110, 00000, …

输入头对应的字符存储在 codes[len][value] 数组中(表示长度为len且编码为value的字符),例如:
codes[1][0] 代表 0 对应的 key
codes[2][0] 代表 00 对应的 key
codes[2][1] 代表 01 对应的 key
codes[2][2] 代表 10 对应的 key
codes[3][0] 代表 000 对应的 key

AC代码:

#include <stdio.h>
#include <memory.h>
char codes[8][130]; // 用于保存编码的字符

int readChar()  // 读取一个字符,注意剔除回车和换行
    while (true) 
        int ch = getchar();
        if (ch != '\\n' && ch != '\\r')
            return ch;
    


int readInt(int len)  // 读取二进制字符串,len为长度,返回对应的十进制数
    int digit = 0;
    while (len--)
        digit = 2 * digit + readChar() - '0';
    return digit;


int readHeader()  // 读取编码头
    memset(codes, 0, sizeof(codes));
    codes[1][0] = readChar(); // 先读取一个看是不是EOF
    if (EOF == codes[1][0])
        return 0;

    for (int len = 2; len <= 7; ++len) 
        for (int i = 0; i < (1 << len) - 1; ++i) 
            int ch = getchar();
            if (EOF == ch) return 0;
            if ('\\n' == ch || '\\r' == ch) return 1;
            codes[len][i] = ch;
        
    

    return 1;


void printCodes() 
    for (int len = 1; len <= 7; ++len) 
        for (int i = 0; i < (1 << len) - 1; ++i)
            putchar(codes[len][i]);
        putchar('\\n');
    


int main()

    while (readHeader()) 
        //printCodes();
        while (true) 
            int len = readInt(3);
            if (0 == len) break;
            while (true) 
                int x = readInt(len);
                if (x == (1 << len) - 1) break;
                putchar(codes[len][x]);
            
        
        putchar('\\n');
    
    return 0;

以上是关于UVa 213:Message Decoding的主要内容,如果未能解决你的问题,请参考以下文章

UVa 213:Message Decoding

uva213 Message Decoding

刷题记录--UVa213 Message Decoding

[UVa 213]Message Decoding,ACM/ICPC World Finals 1991 信息解码

UVa 213 Message Decoding (信息编码)

[算法竞赛入门经典]Message Decoding,ACM/ICPC World Finals 1991,UVa213