UVa 213 信息解码 (模拟 && 二进制)
题意 :对于下面这个字符串 0,00,01,10,000,001,010,011……. 首先是长度为1的串,然后是长度为2的串,以此类推。不存在全为1的串。 你的任务是编写一个程序。首先输入一个代码头(例如AB#TANCnrtXc),则上述序列的每个串依次对应编码头的每个字符。例如,0对应A,00对应B,01对应#…,0000对应c。接下来是编码文本(可能由多行组成,你应当把他们拼成一个长长的01串)。编码文本由多个小节组成,每个小节的前3个数字代表小节中每个编码的长度,用二进制表示,然后是个字符的编码,以全1结束。编码文本以000结束。
分析 :有两个重要点,首先如何建立字符和所给规则二进制之间的一一对应的关系? 在数据可能多行组成的情况下,如何方便地读取数据进行处理? 对于第一个问题,如果使用map那对于0、00、000的情况只能使用字符串形式进行映射,比较麻烦,可以考虑二进制转化为十进制然后用数组,使用len[长度][数值],表示长度表示二进制的长度,数值表示二进制转化为对应十进制的值是多少,然后整个数组的值就是对应的字符。然后在有多行的情况下,可以考虑编写一个readch()函数来跳过'\n'和'\r’读取数据,之后的便很好模拟了。
inline char readch() { int ch; while(true){ ch = getchar(); if(ch!='\r' && ch!='\n') return ch; } }
经验 :多行的读入技巧readch()、二进制长度与十进制数值之间的关系是len = pow(2, n) - 1,且题目中不包含全1的二进制的话,那就是从0~pow(2, n)-2递增了。
#include<bits/stdc++.h> using namespace std; ][]; inline char readch() { int ch; while(true){ ch = getchar(); if(ch!='\r' && ch!='\n') return ch; } } int getcode() { memset(len, , sizeof(len)); len[][] = readch(); ; i<=; i++){ ; j<(<<i)-; j++){ int ch; ch = getchar(); ; ; else len[i][j] = ch; } } } int readint(int Len) { ; + (readch() - '); return ret; } int main(void) { // freopen("in.txt", "r", stdin); while(getcode()){ while(true){ ); ) break; while(true){ int v = readint(position); <<position)-) break; putchar(len[position][v]); } } puts(""); } ; }
UVa 213 信息解码 (模拟 && 二进制)的更多相关文章
- UVA 213 信息解码(二进制&位运算)
题意: 出自刘汝佳算法竞赛入门经典第四章. 考虑下面的01串序列: 0, 00, 01, 10, 000, 001, 010, 011, 100, 101, 110, 0000, 0001, …, 1 ...
- 【每日一题】 UVA - 213 Message Decoding 模拟解码+读入函数+阅读题
题意:阅读理解难度一道比一道难orz.手摸了好久样例 题解: 读入:大循环用getline读入header顺便处理一下, 里面再写两重循环,外层一次读三个串,内层一次读num个串. 之后就查表,线性 ...
- 算法习题---4.4信息解码(UVa213)
一:题目 消息编码方案要求在两个部分中发送一个被编码的消息.第一部分:称为头,包含消息的字符.第二部分包含一个模式 表示信息.你必须写一个程序,可以解码这个消息. (一)题目详细 你的程序的编码方案的 ...
- 遗传算法,实数编码的交叉操作之SBX(模拟二进制交叉)
本文主要介绍遗传算法(实数编码)的交叉操作中的SBX,模拟二进制交叉. 首先,给出个人用python2.7实现的代码,具体模块已上传到: https://github.com/guojun007/sb ...
- 把vux中的@font-face为base64格式的字体信息解码成可用的字体文件
在最近移动端项目中用到了vux,感觉用着还习惯,当把vux使用到PC端的时候出现了IE浏览器出现,这样的错误信息: CSS3114: @font-face 未能完成 OpenType 嵌入权限检查.权 ...
- 标准遗传算法(实数编码 python实现)模拟二进制交叉SBX 多项式变异
代码地址: https://github.com/guojun007/real_sga 本部分是采用实数编码的标准遗传算法,整体流程与上一篇二进制编码的基本一致, 主要区别在于本部分的交叉操作为模拟二 ...
- UVA.11806 Cheerleaders (组合数学 容斥原理 二进制枚举)
UVA.11806 Cheerleaders (组合数学 容斥原理 二进制枚举) 题意分析 给出n*m的矩形格子,给出k个点,每个格子里面可以放一个点.现在要求格子的最外围一圈的每行每列,至少要放一个 ...
- SBX(Simulated binary crossover)模拟二进制交叉算子和DE(differential evolution)差分进化算子
一起来学演化计算-SBX(Simulated binary crossover)模拟二进制交叉算子和DE(differential evolution)差分进化算子 觉得有用的话,欢迎一起讨论相互学习 ...
- UVa 213,World Finals 1991,信息解码
题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...
随机推荐
- laravel框架之及時更改
public function ajaxxiu(request $request) { $id = $request->post('id'); $fd = $request->post(' ...
- 03: saltstack和ansible的区别和原理
1.1 SaltStack.Ansible.Puppet比较 1.SaltStack 1. saltStack由Python编写,为server-client模式的系统,自己本身支持多master. ...
- npm学习(三)之如何安装本地包、更新本地安装的包、卸载本地安装的包
如何安装本地包 有两种方式用来安装 npm 包:本地安装和全局安装.至于选择哪种方式来安装,取决于我们如何使用这个包. 如果你自己的模块依赖于某个包,并通过 Node.js 的 require 加载, ...
- 国内高速下载Docker
一般情况下,我们可以从Docker官网下载docker安装文件,但是官方网站由于众所周知的原因,不是访问慢,就是下载慢.下载docker安装包动不动就要个把小时,真是极大的影响工作效率. 在这里推荐一 ...
- php邮件防注入以及实现经典代码
<?php function spamcheck($field) { // filter_var() 过滤 e-mail // 使用 FILTER_SANITIZE_EMAIL ...
- 五、vue中export和export default的使用
一.export的使用 比喻index.js要使用test.js中的数据,首先在test.js文件中进行导出操作 代码如下: export function list() { alert(" ...
- Linux使用fsck修复文件系统
1.fsck---file system check fsck 扫描文件系统时一定要在单用户模式.修复模式或把设备umount后进行.如果扫描运行中的系统,会造成系统文件损坏. RHEL6中fsc ...
- cmd命令删除文件夹或文件
删除空文件夹rd /s/q "D:\Program Files\afish" 删除里面的文件del /a/f/q "D:\Program Files\afish\123. ...
- C++11 学习笔记
unique_ptr 可以实现如下功能: 1.为动态申请的内存提供异常安全 2.讲动态申请的内存所有权传递给某函数 3.从某个函数返回动态申请内存的所有权 4.在容器中保存指针 5.auto_ptr ...
- docker概述和安装
一:概述 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器或Windows 机器上,也可以实现虚拟化,容器是完全使用 ...