码迷,mamicode.com
首页 > 其他好文 > 详细

UVa 213 -- Message Decoding

时间:2018-02-04 13:47:45      阅读:126      评论:0      收藏:0      [点我收藏+]

标签:text   sci   utc   ascii码   enter   size   rtu   font   多个   

 Message Decoding 

技术分享图片

技术分享图片

simple input

TNM AEIOU
0010101100011
1010001001110110011
11000

$#**\
0100000101101100011100101000

 技术分享图片

 

Message Decoding - UVALive 5152 - Virtual Judge

 

题意:

  给一个编码头和一串编码(编码可以换行),编码头根据以下规则对应编码{  考虑下面的01串:  0,00,01,10,000,001,010,101,110,0000,0001.....首先是长度为1的串,然后是长度为二的串,以此类推。并且每一段长度的数字从0到(1<<n)-1(第n段)排列,即题目中所说不包括全为1的串。

  编码文本由多个小节组成,每小节前三位数字表示该小节中每个编码的长度(例010表示编码长度为2),然后是各个字符的编码,每小节以全1结束。例第一小节:00101。

  你的任务是编写一个解码程序,将输入的编码转化为对应编码头中字符的句子输出。

  putchar(字符ASCII码)输出字符。

 

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int code[8][1<<8];
 4 int ans[1000];
 5 int readchar()
 6 {//处理换行符,并返回第一个合法字符的ascii
 7     char c = getchar();
 8     while(c==\n||c==\r)
 9     {
10         c = getchar();
11     }
12     return c;
13 }
14 int readcodes()
15 {
16     memset(code,0,sizeof(code));
17     ///需要处理换行符,调用readchar进行处理,并返回第一个合法字符
18     code[1][0] = readchar();//读取第一个不是换行符的字符,
19                             //它的长度为1,编码为0,即为数组的下标
20                             //将其ascii存储在code[1][0]中
21     if(code[1][0] == EOF)
22         return 0;
23 
24     char c;
25     for(int j=2;j<=7;j++)
26     {
27         for(int k = 0;k<(1<<j)-1;k++)
28         {
29             c = getchar();
30             if(c == EOF) return 0;
31             if(c == \n || c == \r) return 1;
32             code[j][k] = c;
33         }
34     }
35     return 1;//读到EOF返回0,结束输入,否则返回1继续输入编码。
36 }
37 int readint(int len)
38 {
39     char c;
40     int sum = 0;
41     for(int i=0;i<len;i++)
42     {
43         c = readchar();
44         sum = sum*2 + (c-0);
45     }
46     return sum;
47 }
48 int main()
49 {
50     while(readcodes())///读取编码头,进行编码
51     {
52         int ansLen = 0;
53         while(1)
54         {
55             int len = readint(3);
56             if(len == 0) break;
57             while(1)
58             {
59                 int c = readint(len);
60                 if(c == (1<<len)-1) break;
61                 ///进行译码
62                 ansLen++;
63                 ans[ansLen] = code[len][c];
64             }
65         }
66         for(int i=1;i<=ansLen;i++)
67             putchar(ans[i]);
68         putchar(\n);
69     }
70     return 0;
71 }

 技术分享图片

技术分享图片

 

UVa 213 -- Message Decoding

标签:text   sci   utc   ascii码   enter   size   rtu   font   多个   

原文地址:https://www.cnblogs.com/yxh-amysear/p/8412869.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!