UVa213 - Message Decoding
题意:给出一个字符串及其编码序列,解码得到原始序列。编码序列是用的二进制。形式如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相关推荐
- 算法竞赛入门经典(第二版) | 例题4-4 信息解码 (紫皮书牛啤!)(UVa213,Message Decoding)
大意: 二进制编码中取前三位,得到编码长度为n(0<=n<=7), 按此长度重复截取编码中剩余部分(n位一截),直到读取n个1结束.再次取三位,长度为n,重复上述操作-直至n个1后接000 ...
- UVA213 UVALive5152 Message Decoding
World Finals >> 1991 - San Antonio 问题链接:UVA213 UVALive5152 Message Decoding. 问题简述:参见问题链接. 问题分析 ...
- UVA - 213 Message Decoding
Message Decoding UVA - 213 题目传送门 emmmm,此题按照紫书上的思路来即可,要么太复杂 AC代码: #include <cstdio> #include &l ...
- 《算法竞赛入门经典》 例题 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. 某些消息编码方案要求 ...
- UVA 213 Message Decoding
题目链接:https://vjudge.net/problem/UVA-213 题目翻译摘自<算法禁赛入门经典> 题目大意 考虑下面的 01 串序列: 0, 00, 01, 10, 000 ...
- 信息解码(Message Decoding)ACM题目
分析: 长度为1的串,可以放1个编码 长度为2的串,可以放3个编码 长度为3的串,可以放7个编码 ..... 长度为n的串,可以放 n^2 -1 个编码 思路: 1. 用 1<<n 表示 ...
- Message Decoding密码翻译
这是一道模拟题ex 其实每一道模拟题都很"简单", 这道题就是难在读英文题!处理输入! 真的我竟然花了几个小时就只是为了看懂样例!!orz 题目大意 考虑下面的01串序列: 0,0 ...
- UVA 213 - Message Decoding 简单题 lambda表达式 23333333
不知道算什么类型才好.......就是按照题意描述读就行了 从来没有写过3个while循环叠在一起...... 至于根据号码去找在header里面的下标,其实就是一个二元函数(length,value ...
- 《算法竞赛入门经典(第2版)》——学习记录
前言: 这里主要记录本人在学习紫书过程中充分理解过的题目的AC代码,便于以后回顾时查找代码和思路,毕竟看别人的真的有点难懂.此外,本书甚至是本书之外的相关知识学习也可能在此留下记录. 作为一只 ...
最新文章
- memcached 系列2:memcached实例(转载)
- 全球规模最大的全浸没式液冷数据中心落户杭州余杭
- git clone 出错SSL certificate problem, verify that the CA cert is OK.
- java ArrayList排序
- linux中断pollselcet按键处理机制
- php mvc 逻辑层在哪,mvc的业务逻辑应该放哪里?
- Linux引导流程(第二版)
- Spring Security:基于MySQL数据库的身份认证
- python理论知识选择题_python基础知识练习题(二)
- mysql-------常用函数
- 如何实现一个遵从设计原则的积分兑换系统2
- psn账号 证明你不是机器人_世界上最聪明的机器人,AlphaGo智能机器人轻松击败世界围棋冠军...
- 2018_11_25_生活记录
- 【C语言程序设计】C语言求圆周率π(三种方法)
- android 获取蓝牙设备id_安卓蓝牙系统中如何获取蓝牙音乐的音频跟踪会话ID
- EasyCVR前端关闭播放器,后端websocket播放链接依然存在是什么原因?
- shiro:principal为空问题
- 计算机辅助设计软件应用答案,专科《计算机辅助设计软件的应用》_试卷_答案.doc...
- keepass使用坚果云管理我的密码
- matlab批量改名字0001 0002,Matlab批量修改文件夹名字
热门文章
- VMware Workstation 10装Mac OS X 10.9
- shell的一些常识
- python编码读法-python的读法
- python代码壁纸-70行python代码实现壁纸批量下载
- 在哪里能收到python实例代码-python仿evething的文件搜索器实例代码
- python画轨迹曲线-matplotlib绘制随机行走轨迹图
- 学习python需要什么基础-学习python需要什么基础
- python正规教育机构-长沙python培训机构哪家好
- python四大软件-9个使用Python的世界级软件公司
- 九九乘法表口诀python-Python用for循环实现九九乘法表