题意:给出一个字符串及其编码序列,解码得到原始序列。编码序列是用的二进制。形式如0,00,01,10。也就是根据二进制的位数及其所能表示的二进制,注意全1的不包含在内。0对应字符串的第一个字符,00对应字符串中的第二个字符。

思路:先建序列对应位置的表。其递推关系为f(1)= 0,f(2)= f(1) + 2^1 - 1,,,依此类推有f(n) = f(n-1) + 2^(n - 1) - 1。其它的就是根据题意来做。前三个字符表示后序key的长度。三个0表示结束。

代码如下:

#include <iostream>
#include <fstream>
#include <cmath>
#include <string>using namespace std;const int N = 8;int f[N];void init();
int binToInt(string s);int main()
{
#ifndef ONLINE_JUDGEifstream fin("F:\\OJ\\uva_in.txt");streambuf *old = cin.rdbuf(fin.rdbuf());
#endifinit();string message;char ch;while (getline(cin, message)){while (1){string str_len;int cnt = 0;while (cnt != 3){cin.get(ch);if (ch == '\n') continue;str_len += ch;cnt++;}if (str_len == "000"){cout << endl;getline(cin, message);break;}int len = binToInt(str_len);while (1){string tmp;int count = 0;while (count < len){cin.get(ch);if (ch == '\n') continue;tmp += ch;count++;}string cmp;cmp.append(len, '1');if (tmp == cmp) break;int value = binToInt(tmp);int pos = f[len] + value;cout << message[pos];}}}#ifndef ONLINE_JUDGEcin.rdbuf(old);
#endifreturn 0;
}void init()
{f[0] = 0; f[1] = 0;for (int i = 2; i < N; i++){f[i] = f[i - 1] + pow(2, i - 1) - 1;}
}int binToInt(string s)
{int len = s.length();int sum = 0;for (int i = 0; i < len; i++){sum = sum * 2 + (s[i] - '0');}return sum;
}

UVa213 - Message Decoding相关推荐

  1. 算法竞赛入门经典(第二版) | 例题4-4 信息解码 (紫皮书牛啤!)(UVa213,Message Decoding)

    大意: 二进制编码中取前三位,得到编码长度为n(0<=n<=7), 按此长度重复截取编码中剩余部分(n位一截),直到读取n个1结束.再次取三位,长度为n,重复上述操作-直至n个1后接000 ...

  2. UVA213 UVALive5152 Message Decoding

    World Finals >> 1991 - San Antonio 问题链接:UVA213 UVALive5152 Message Decoding. 问题简述:参见问题链接. 问题分析 ...

  3. UVA - 213 Message Decoding

    Message Decoding UVA - 213 题目传送门 emmmm,此题按照紫书上的思路来即可,要么太复杂 AC代码: #include <cstdio> #include &l ...

  4. 《算法竞赛入门经典》 例题 4-4 信息编码 (Message Decoding,ACM,ICPC World Finals 1991,UVa 213)

    原题及翻译 Some message encoding schemes require that an encoded message be sent in two parts. 某些消息编码方案要求 ...

  5. UVA 213 Message Decoding

    题目链接:https://vjudge.net/problem/UVA-213 题目翻译摘自<算法禁赛入门经典> 题目大意 考虑下面的 01 串序列: 0, 00, 01, 10, 000 ...

  6. 信息解码(Message Decoding)ACM题目

    分析: 长度为1的串,可以放1个编码 长度为2的串,可以放3个编码 长度为3的串,可以放7个编码 ..... 长度为n的串,可以放 n^2 -1 个编码 思路: 1. 用 1<<n  表示 ...

  7. Message Decoding密码翻译

    这是一道模拟题ex 其实每一道模拟题都很"简单", 这道题就是难在读英文题!处理输入! 真的我竟然花了几个小时就只是为了看懂样例!!orz 题目大意 考虑下面的01串序列: 0,0 ...

  8. UVA 213 - Message Decoding 简单题 lambda表达式 23333333

    不知道算什么类型才好.......就是按照题意描述读就行了 从来没有写过3个while循环叠在一起...... 至于根据号码去找在header里面的下标,其实就是一个二元函数(length,value ...

  9. 《算法竞赛入门经典(第2版)》——学习记录

    前言:   这里主要记录本人在学习紫书过程中充分理解过的题目的AC代码,便于以后回顾时查找代码和思路,毕竟看别人的真的有点难懂.此外,本书甚至是本书之外的相关知识学习也可能在此留下记录.   作为一只 ...

最新文章

  1. memcached 系列2:memcached实例(转载)
  2. 全球规模最大的全浸没式液冷数据中心落户杭州余杭
  3. git clone 出错SSL certificate problem, verify that the CA cert is OK.
  4. java ArrayList排序
  5. linux中断pollselcet按键处理机制
  6. php mvc 逻辑层在哪,mvc的业务逻辑应该放哪里?
  7. Linux引导流程(第二版)
  8. Spring Security:基于MySQL数据库的身份认证
  9. python理论知识选择题_python基础知识练习题(二)
  10. mysql-------常用函数
  11. 如何实现一个遵从设计原则的积分兑换系统2
  12. psn账号 证明你不是机器人_世界上最聪明的机器人,AlphaGo智能机器人轻松击败世界围棋冠军...
  13. 2018_11_25_生活记录
  14. 【C语言程序设计】C语言求圆周率π(三种方法)
  15. android 获取蓝牙设备id_安卓蓝牙系统中如何获取蓝牙音乐的音频跟踪会话ID
  16. EasyCVR前端关闭播放器,后端websocket播放链接依然存在是什么原因?
  17. shiro:principal为空问题
  18. 计算机辅助设计软件应用答案,专科《计算机辅助设计软件的应用》_试卷_答案.doc...
  19. keepass使用坚果云管理我的密码
  20. matlab批量改名字0001 0002,Matlab批量修改文件夹名字

热门文章

  1. VMware Workstation 10装Mac OS X 10.9
  2. shell的一些常识
  3. python编码读法-python的读法
  4. python代码壁纸-70行python代码实现壁纸批量下载
  5. 在哪里能收到python实例代码-python仿evething的文件搜索器实例代码
  6. python画轨迹曲线-matplotlib绘制随机行走轨迹图
  7. 学习python需要什么基础-学习python需要什么基础
  8. python正规教育机构-长沙python培训机构哪家好
  9. python四大软件-9个使用Python的世界级软件公司
  10. 九九乘法表口诀python-Python用for循环实现九九乘法表