【UVA213】Message Decoding(读入技巧+二进制十进制转换)
题目:https://vjudge.net/problem/UVA-213
思路:
1.(len,value)二元组,len为二进制位数,value为第value+1个len位二进制,code[len][value]为其对应的字母
len最大为7,value最大为1<<8-1
如:对于
TNM AEIOU
code[1][0]=T code[2][0]=N code[2][1]=M code[2][2]=空格
依次类推
2.编码头在一行,但是输入的编码文本却可能是由多行组成的,且中间可能有任意个空格换行之类的,要注意读取技巧,边输入边读
ac代码:
《算法竞赛入门经典》紫书代码
#include <iostream>
#include <cmath>
#include <string.h>
#include <ctype.h>
#include <algorithm>
#include <stdlib.h>
#define maxn 100
#define inf 1e+9+10
using namespace std;
typedef long long ll;
int code[8][1<<8];
int readchar()
{for( ; ;){int ch=getchar();if(ch!='\n'&&ch!='\r')return ch;}
}
int readint(int c)
{int v=0;while(c--)v=v*2+readchar()-'0';return v;
}
int readcodes()
{memset(code,0,sizeof(code));code[1][0]=readchar();for(int len=2;len<=7;len++){for(int i=0;i<(1<<len)-1;i++){int ch=getchar();if(ch==EOF) return 0;//读取到文件末尾,没有输入if(ch=='\n'||ch=='\r') return 1;//结束输入编码头code[len][i]=ch;}}return 1;
}
void printcodes()
{for(int len=1;len<=7;len++){for(int i=0;i<(1<<len)-1;i++){if(code[len][i]==0)//说明后面都是0,未存入数据return ;printf("code[%d][%d]=%c\n",len,i,code[len][i]);}}
}
int main()
{//freopen("/Users/zhangkanqi/Desktop/11.txt","r",stdin);while(readcodes()){//printcodes();for(; ;){int len=readint(3);if(len==0)//000时break;//printf("len=%d\n",len);for( ; ;){int v=readint(len);//printf("v=%d\n",v);if(v==(1<<len)-1)//len位都为1时break;putchar(code[len][v]);}}printf("\n");}return 0;
}
网上参考大神的代码:
#include <iostream>
#include <cmath>
#include <string.h>
#include <ctype.h>
#include <algorithm>
#include <stdlib.h>
#define maxn 100
#define inf 1e+9+10
using namespace std;
typedef long long ll;
char code[8][1<<8];
string s;
char ch;
int len,val,l,i,j,a,b,c;
void print()
{while(1){int val = 0;for (i = 0; i < len; i++) {do {scanf("%c", &ch);} while (!isdigit(ch));val = val * 2 + (ch - '0');}if (val == ((1 << len) - 1))//全1return;elseputchar(code[len][val]);}
}
int main()
{//freopen("/Users/zhangkanqi/Desktop/11.txt","r",stdin);while(getline(cin,s)){if(!s[0])//不是很懂这句话,不加的话会pecontinue;len=1,val=0,l=s.length();memset(code,0,sizeof(code));for(i=0;i<l;i++){code[len][val++]=s[i];if(val==((1<<len)-1)){len++;val = 0;}}/*for(i=1;i<=len;i++)for(j=0;j<((1<<i)-1);j++){if(code[i][j]!=0){cout << i << ' ' << j << ' ';putchar(code[i][j]);cout << endl;}}输出code[][]*/while(scanf("%1d%1d%1d",&a,&b,&c)){len=a*4+b*2+c;if(len==0){printf("\n");break;}print();}}return 0;
}
【UVA213】Message Decoding(读入技巧+二进制十进制转换)相关推荐
- 初中计算机教案十进制转二进制,高中信息技术二进制十进制转换教案
二进制十进制转换教案[教学目的与要求]1.熟悉数制的概念:2.掌握位权表示法:3.熟练掌握各数制之间的转换方法.[课时安排]1课时.[教学重点与难点]1.难点:位权表示法十进制转化为二进制2.重点:二 ...
- Python中二进制十进制转换
hello大家好,今天我想和大家分享一下在Python中进制转换加减法的方法. 比如现在我们需要求100 + 10,然后需要将结果110以二进制的形式返回,又或者我们现在有一个小需求,就是要计算二进制 ...
- 算法竞赛入门经典(第二版) | 例题4-4 信息解码 (紫皮书牛啤!)(UVa213,Message Decoding)
大意: 二进制编码中取前三位,得到编码长度为n(0<=n<=7), 按此长度重复截取编码中剩余部分(n位一截),直到读取n个1结束.再次取三位,长度为n,重复上述操作-直至n个1后接000 ...
- 怎样用计算机二进制,二进制计算_如何用系统自带的计算器二进制十进制转换...
系统自带的计算器是不支持小数位转换的.角度是DEG,弧度是RAD,梯度是GRA,转换模式的方法是按MODE,然后按相应的键.二进制,八进制,十六进制和十进制一样是进位制式.四字.双字.单字.字节是数据 ...
- 二进制十进制转换史上最牛逼算法!!
十进制转二进制 相信学过计算机的同学一定对二进制不陌生,计算机底层的通讯就是二进制嘛!二进制由0和1组成,那么怎么快速的对一个十进制数转换成二进制数呢? 最古老的方法大家还记得怎么转换吗?比如35这个 ...
- UVa213 - Message Decoding
题意:给出一个字符串及其编码序列,解码得到原始序列.编码序列是用的二进制.形式如0,00,01,10.也就是根据二进制的位数及其所能表示的二进制,注意全1的不包含在内.0对应字符串的第一个字符,00对 ...
- 关于计算机的进制之间的转换 二进制转换十进制 十进制转换二进制
最近在学习计算机基础 研究到进制转换,颇有心得,在此做个解释和记录: 首先介绍 二进制转换十进制 二进制数第0位的权值是2的0次方,第1位的权值是2的1次方-- 所以,设有一个二进制数:1 ...
- python实现十进制转换成十六以内任意进制
十进制转换成二进制 十进制转换成二进制,采用的是"除以2求余数"的计算方法,如下所示: "除以2"的过程,得到的余数是从低到高的次序,而需要的带的输出是从高位到 ...
- 十进制转换成十六进制c语言 链栈,C语言 链栈 实现十进制转换二进制,八进制,十六进制...
C语言 链栈 实现十进制转换二进制,八进制,十六进制 (3页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 11.90 积分 最后运行结果:代码:#incl ...
- C语言十进制转换成二进制源码
把开发过程比较重要的一些内容备份一次,下边资料是关于C语言十进制转换成二进制的内容,应该对各位朋友有一些用. #include int main() { int num; std::cout < ...
最新文章
- 中国各地高考难度地图:上大学最难的省份是哪里!?
- 不是报错就是崩盘,这些代码迁移问题你遇到过几个?
- 彼之蜜糖,吾之砒霜——聊聊软件开发中的最佳实践
- Hibernate criteria 增加排序项
- R语言应用实战-基于R的因子分析(以上市公司数据为例)
- 剑指offer: 不用加减乘除做加法
- SAP CRM webclient ui help link超链接的生成逻辑
- xcode常用快捷键_Mac及Xcode常用快捷键
- ajax_典型应用_添加商品标题
- eclipse php链接mysql_eclipse怎么连接mysql
- Zabbix故障但是没有错误日志输出的一种解决办法
- div设置背景半透明
- 实用网站、软件、App分享
- fluent二维叶型仿真_FLUENT太阳能热水器仿真
- MessagingTimeout: Timed out waiting for a reply to message ID
- Unity获取系统信息SystemInfo(CPU、显卡、操作系统等信息)
- 磁致伸缩位移传感器的特点及工作原理
- 课题组王猛的论文被遥感领域顶级期刊 IEEE TGRS 录用
- fib(OSC招聘-小而美的公司推荐){fib(0x5-1) + fib(0x5-2)}
- 网络原理实验4 路由协议的配置
热门文章
- WSS 3.0与MOSS 2007重要更新
- matlab如何持续存贮多维矩阵,matlab多维矩阵在内存中存储顺序
- 华为主题锁屏壁纸换不掉_华为手机中的这些默认设置一定要改,不然会导致手机卡顿加快耗电...
- arm平台下的反汇编pdf_stm32逆向与安全科普,bin文件逆向反汇编
- 用简单 JS 实现代替 MYBATIS LOG PLUGIN 的功能
- 计算机培训实践反思模板,基于问题解决式课堂教学模式的反思
- 通过数据,从键盘录入学生考试科目数,然后依次录入学的每一科分数.使用数组存储学生分数.然后输出总分,平均分,简单易理解
- python管道怎么使用_如何在多个流程中正确使用管道(2)
- 脚本录制软件python 按键精灵 tc_GitHub - yang-dongxu/KeymouseGo: 类似按键精灵的鼠标键盘录制和自动化操作...
- react组件卸载调用的方法_React组件如何还能跑得再快一点