uvaoj 213 - Message Decoding(二进制,输入技巧)

https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=149

跨行读字符的函数readchar()  可以学习一下

把编码理解成二进制,用(len,value)这个二元组来表示一个编码,其中len是编码长度,value是编码对应的十进制数值

用code[len][value]保存这个编码所对应的字符

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int code[8][1<<8];
 4 int readchar()
 5 {
 6     for(;;)
 7     {
 8         int ch=getchar();
 9         if(ch!='\n'&&ch!='\r')return ch;
10     }
11 }
12 int readint(int c)//读取接下来c个二进制字符,并返回十进制 
13 {
14     int v=0;
15     while(c--)v=v*2+readchar()-'0';
16     return v;
17 }
18 int readcodes()
19 {
20     memset(code,0,sizeof(code));
21     code[1][0]=readchar();
22     for(int len=2;len<=7;len++)
23     {
24         for(int i=0;i<(1<<len)-1;i++)
25         {
26             int ch=getchar();
27             if(ch==EOF)return 0;
28             if(ch=='\n'||ch=='\r')return 1;
29             code[len][i]=ch;
30         }
31     }
32     return 1;
33 }
34 int main()
35 {
36     while(readcodes())
37     {
38         for(;;)
39         {
40             int len=readint(3);
41             if(len==0)break;
42             for(;;)
43             {
44                 int v=readint(len);
45                 if(v==(1<<len)-1)break;
46                 putchar(code[len][v]);
47             }
48         }
49         putchar('\n');
50     }
51     return 0;
52 }

猜你喜欢

转载自www.cnblogs.com/fqfzs/p/9952242.html
213