1. 程式人生 > >uvaoj 213 - Message Decoding(二進位制,輸入技巧)

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 }