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

UVa 213 Message Decoding

时间:2015-06-12 16:31:52      阅读:167      评论:0      收藏:0      [点我收藏+]

标签:

题目大意:
用下列01串存编码头:
0,00,01,10,000,001,010,011,100,101,110,0000,0001,……
编码头的每个字符对应上面的01串。
然后再输入编码文本(只含01),格式为 长度 内容 终止符。
长度:三个01字符(000~111);
内容:长度个01字符;
终止符:长度个1;

Sample input

TNM AEIOU
0010101100011
1010001001110110011
11000
$#**0100000101101100011100101000

Sample output

TAN ME
##*\$

代码如下:

  1. #include<cstdio>
  2. #include<cstring>
  3. using namespace std;
  4. int readchar() {//读入字符,并且过滤开头回车或换行
  5. for (;;) {
  6. int ch = getchar();
  7. if (ch != ‘\n‘ && ch != ‘\r‘)
  8. return ch;
  9. }
  10. }
  11. int readint(int c) {//计算二进制大小
  12. int v = 0;
  13. while (c--) {
  14. v = v * 2 + readchar() - ‘0‘;
  15. }
  16. return v;
  17. }
  18. int code[8][1 << 8];//1 << 8相当于1*2^8, [x][y]表示长度为y(长度为x)的字符
  19. bool readcodes() {//读入数据,并且判断是否读入成功
  20. memset(code, 0, sizeof(code));
  21. code[1][0] = readchar();
  22. for (int len = 2; len <= 7; ++len) {
  23. for (int i = 0; i < (1 << len) - 1; ++i) {
  24. int ch = getchar();
  25. if (ch == EOF) return false;//读到文件结束,说明读入失败
  26. if (ch == ‘\n‘ || ch == ‘\r‘) return true;//读到换行或回车说明读入成功
  27. code[len][i] = ch;
  28. }
  29. }
  30. return true;
  31. }
  32. int main() {
  33. while (readcodes()) {
  34. for (;;) {
  35. int len = readint(3);
  36. if (len == 0) break;
  37. for (;;) {
  38. int v = readint(len);
  39. if (v == (1 << len) - 1) break;//全1时退出
  40. putchar(code[len][v]);
  41. }
  42. }
  43. putchar(‘\n‘);
  44. }
  45. return 0;
  46. }





UVa 213 Message Decoding

标签:

原文地址:http://www.cnblogs.com/liangyongrui/p/4571838.html

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