题意:

出自刘汝佳算法竞赛入门经典第四章。

考虑下面的01串序列:

0, 00, 01, 10, 000, 001, 010, 011, 100, 101, 110, 0000, 0001, …, 1101, 1110, 00000, … 首先是长度为1的串,然后是长度为2的串,依此类推。如果看成二进制,相同长度的后 一个串等于前一个串加1。注意上述序列中不存在全为1的串。 你的任务是编写一个解码程序。首先输入一个编码头(例如AB#TANCnrtXc),则上述 序列的每个串依次对应编码头的每个字符。例如,0对应A,00对应B,01对应#,…,110对 应X,0000对应c。接下来是编码文本(可能由多行组成,你应当把它们拼成一个长长的01 串)。编码文本由多个小节组成,每个小节的前3个数字代表小节中每个编码的长度(用二 进制表示,例如010代表长度为2),然后是各个字符的编码,以全1结束(例如,编码长度 为2的小节以11结束)。编码文本以编码长度为000的小节结束。 例如,编码头为$#**\,编码文本为0100000101101100011100101000,应这样解码: 010(编码长度为2)00(#)00(#)10(*)11(小节结束)011(编码长度为3)000(\)111(小节结束)001(编码 长度为1)0($)1(小节结束)000(编码结束)。

分析:

以后可以用一个函数去处理有换行的读入。

 int read()
{
char ch;
while()
{
ch = getchar();
if(ch != '\r' && ch != '\n')
return ch;
}
}

可以用这个函数去处理二进制转换十进制

 int btod(int len)
{
int v= ;
while(len--)
{
v = v * + read() - '';
}
return v;
}

然后注意读入完的代码转换就行 1<<n 等价于 2的n次方。 然后长度为n的编码最多可以存1<<n - 1 个数, 因为全是1的序列是不存在的。

最后放上代码#include <bits/stdc++.h>

using namespace std;
char input[<<];
char code[][<<];
int codelen;
int read()
{
char ch;
while()
{
ch = getchar();
if(ch != '\r' && ch != '\n')
return ch;
}
}
int btod(int len)
{
int v= ;
while(len--)
{
v = v * + read() - '';
}
return v;
}
int trans()
{
int len = , cnt = ;
for(int i = ; i < strlen(input); i++)
{
if(cnt < (<<len)-)
{
code[len][cnt++] = input[i];
}
else
{
cnt = ;
code[++len][cnt++] = input[i];
}
}
return len;
}
void printtest()
{
for(int i = ; i <= codelen; i++)
{
int cnt = ;
while(code[i][cnt])
{
printf("%d %d %c\n",i,cnt,code[i][cnt]);
cnt++;
}
}
}
int main()
{
// freopen("1.txt","r",stdin);
int ok = ;
while(gets(input))
{
memset(code,,sizeof(code));
// puts(input);
codelen = trans();
// printtest();
while()
{
int len = btod(); if(len == )
break;
while()
{
int b = btod(len);
if(b == (<<len)-)
{
break;
}
printf("%c", code[len][b]);
}
}
printf("\n");
getchar();
// 注意这个getchar 是吸收最后一个回车符用的 以后使用getchar()都要注意有没有回车符没被吸收 }
}

UVA 213 信息解码(二进制&位运算)的更多相关文章

  1. UVa 213 信息解码 (模拟 && 二进制)

    题意 :对于下面这个字符串 0,00,01,10,000,001,010,011……. 首先是长度为1的串,然后是长度为2的串,以此类推.不存在全为1的串. 你的任务是编写一个程序.首先输入一个代码头 ...

  2. uva 10718 Bit Mask (位运算)

    uva 10718  Bit Mask  (位运算) Problem A Bit Mask Time Limit 1 Second In bit-wise expression, mask is a ...

  3. 面试必备:高频算法题终章「图文解析 + 范例代码」之 矩阵 二进制 + 位运算 + LRU 合集

    Attention 秋招接近尾声,我总结了 牛客.WanAndroid 上,有关笔试面经的帖子中出现的算法题,结合往年考题写了这一系列文章,所有文章均与 LeetCode 进行核对.测试.欢迎食用 本 ...

  4. UVA - 13022 Sheldon Numbers(位运算)

    UVA - 13022 Sheldon Numbers 二进制形式满足ABA,ABAB数的个数(A为一定长度的1,B为一定长度的0). 其实就是寻找在二进制中满足所有的1串具有相同的长度,所有的0串也 ...

  5. UVA 10718 Bit Mask 贪心+位运算

    题意:给出一个数N,下限L上限U,在[L,U]里面找一个整数,使得N|M最大,且让M最小. 很明显用贪心,用位运算搞了半天,样例过了后还是WA,没考虑清楚... 然后网上翻到了一个人家位运算一句话解决 ...

  6. UVa 1590 IP网络(简单位运算)

    Description   Alex is administrator of IP networks. His clients have a bunch of individual IP addres ...

  7. UVa 818Cutting Chains (暴力dfs+位运算+二进制法)

    题意:有 n 个圆环,其中有一些已经扣在一起了,现在要打开尽量少的环,使所有的环可以组成一条链. 析:刚开始看的时候,确实是不会啊....现在有点思路,但是还是差一点,方法也不够好,最后还是参考了网上 ...

  8. 位运算基础(Uva 1590,Uva 509题解)

    逻辑运算 规则 符号 与 只有1 and 1 = 1,其他均为0 & 或 只有0 or 0 = 0,其他均为1 | 非 也就是取反 ~ 异或 相异为1相同为0 ^ 同或 相同为1相异为0,c中 ...

  9. Java二进制和位运算,这一万字准能喂饱你

    基础不牢,地动山摇.本文已被 https://www.yourbatman.cn 收录,里面一并有Spring技术栈.MyBatis.JVM.中间件等小而美的专栏供以免费学习.关注公众号[BAT的乌托 ...

随机推荐

  1. Centos 下php安装配置xdebug扩展

    2018年05月02日 19:54:42 杨汉松 阅读数:44   1.下载安装xdebug 获取xdebug wget http://www.xdebug.org/files/xdebug-2.3. ...

  2. SpringBoot入门-15(springboot配置freemarker使用YML)

    https://blog.csdn.net/fengsi2009/article/details/78879924 application.yml spring: http: encoding: fo ...

  3. [Usaco2012 Open]Balanced Cow Subsets

    Description Farmer John's owns N cows (2 <= N <= 20), where cow i produces M(i) units of milk ...

  4. Poj 3294 Life Forms (后缀数组 + 二分 + Hash)

    题目链接: Poj 3294 Life Forms 题目描述: 有n个文本串,问在一半以上的文本串出现过的最长连续子串? 解题思路: 可以把文本串用没有出现过的不同字符连起来,然后求新文本串的heig ...

  5. -Dmaven.multiModuleProjectDirectory system property is not set. Check $M2_HOME environment variable and mvn script match问题处理

    使用MyEclipse运行Maven项目时报如下错误信息: -Dmaven.multiModuleProjectDirectory system property is not set. Check ...

  6. OC中protocol、category和继承的关系--转

    开放封闭原则(OCP)就是,“对扩展开放,对更改封闭”.是所有面向对象设计的一个核心宗旨.感兴趣的可以看百度百科的一些解释:http://baike.baidu.com/view/2493421.ht ...

  7. 银联手机支付控件官方使用指南(ios版)

    目录 版本信息... 2 目录      3 1       概述... 1 2       支付流程介绍... 1 3       测试帐号... 2 4       iOS客户端... 3 4.1 ...

  8. 447 Number of Boomerangs 回旋镖的数量

    给定平面上 n 对不同的点,“回旋镖” 是由点表示的元组 (i, j, k) ,其中 i 和 j 之间的距离和 i 和 k 之间的距离相等(需要考虑元组的顺序).找到所有回旋镖的数量.你可以假设 n ...

  9. DEV—【GridControl添加按钮列】

    效果图 打开GridControl的Run Designer在左侧栏中找到: 添加一个ButtonEdit: 更改属性中的值:Caption为按钮上显示的Text:Kind为按钮的类型: 然后拖到最后 ...

  10. java_dom4j解析xml

    package forRQ; import java.io.File;import java.net.MalformedURLException;import java.util.Iterator;i ...