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 }