ACM详解(7)——压缩与编码

有些题目会给出一些简单的压缩方法或者编码方法,让你实现具体的算法。下面通过题目分析。

1、Parencodings
Description
Let S = s1 s2...s2n be a well-formed string of parentheses. S can be encoded in two different ways:
By an integer sequence P = p1 p2...pn where pi is the number of left parentheses before the ith right parenthesis in S (P-sequence).
By an integer sequence W = w1 w2...wn where for each right parenthesis, say a in S, we associate an integer which is the number of right parentheses counting from the matched left parenthesis of a up to a. (W-sequence).
Following is an example of the above encodings:
S (((()()())))
P-sequence 4 5 6666
W-sequence 1 1 1456
Write a program to convert P-sequence of a well-formed string to the W-sequence of the same string.
Input
The first line of the input contains a single integer t (1 <= t <= 10), the number of test cases, followed by the input data for each test case. The first line of each test case is an integer n (1 <= n <= 20), and the second line is the P-sequence of a well-formed string. It contains n positive integers, separated with blanks, representing the P-sequence.
Output
The output file consists of exactly t lines corresponding to test cases. For each test case, the output line should contain n integers describing the W-sequence of the string corresponding to its given P-sequence.
Sample Input
2
6
4 5 6 6 6 6
9
4 6 6 6 6 8 9 9 9
Sample Output
1 1 1 4 5 6
1 1 2 4 5 1 1 3 9
翻译: S = s1 s2...s2n 是结构正确的(有左括号和右括号组成,并且数量相等,并且对应关系正确)小括号序列,他可以使用两种方式编码:
正整数序列 P = p1 p2...pn , pi 表示第 i 个右括号之前的左括号的数量( P 序列);
正整数序列 W = w1 w2...wn , wi 表示第 i 个右括号对应的左括号的位置(从右向左数, 1,2,3 )( w 序列)。
题目要求根据 p 序列求出 w 序列。
解题思路:
对于 p 序列中的每个元素 pi :
循环判断之前的左括号,对于遇到的每个左括号:
判断是否已经与其他右括号配对,如果已经配对,继续向左判断;
如果没有,则记录它是第几个左括号。
以 4 5 6 6 6 6 为例分析,首先创建数组 a 表示左括号, 1 表示没有配对的左括号, 0 表示已经配对的左括号。初始情况 a 的值为 1 1 1 1 1 1
读取 p 序列中的信息
P1=4 从 a[3] 开始判断左括号, a[3]=1 ,所以与 a[3] 括号对应,所以 w1=1 , a 的值 1 1 1 0 1 1
P2=5 从 a[4] 开始判断左括号, a[4]=1 ,所以与 a[4] 括号对应,所以 w2=1 , a 的值 1 1 1 0 0 1
P3=6 从 a[5] 开始判断左括号, a[5]=1 ,所以与 a[5] 括号对应,所以 w3=1 , a 的值 1 1 1 0 0 0
P4=6 从 a[5] 开始判断左括号, a[5]=0 , a[4]=0,a[3]=0,a[2]=1, 所以与 a[2] 括号对应,所以 w4=4 , a 的值 1 1 0 0 0 0
同理得到 w5=5 w6=6
最后的 w 序列为: 111456
参考代码略。
2、Encoding
描述
Given a string containing only 'A' - 'Z', we could encode it using the following method:
1. Each sub-string containing k same characters should be encoded to "kX" where "X" is the only character in this sub-string.
2. If the length of the sub-string is 1, '1' should be ignored.
输入
The first line contains an integer N (1 <= N <= 100) which indicates the number of test cases. The next N lines contain N strings. Each string consists of only 'A' - 'Z' and the length is less than 10000.
输出
For each test case, output the encoded string in a line
样例输入
2
ABC
ABBCCC
样例输出
ABC
A2B3C
翻译:把字符串中出现的连续相同的多个字符使用该字符以及出现的次数表示,例如 ABBCCC 中的 BB 可以使用 2B 表示,可以使用 3C 表示。题目要求对给定的字符串编码。
解题思路:遍历字符串,取出每个字符与之前的字符进行比较,如果相等计数加 1 ,不相同,则从新计数。例如 ABBCCC ,可以处理如下。
先初始化, c 表示前一个字符, count 表示统计次数。 c=’0’,count=0 。
对于 A ,之前没有字符, count=1 , c=’A’;
对于 B ,之前的字符是 ’A’ ,输出 A , count=1 , c=’A’ ;
对于 B ,之前的字符是 ’B’ , count=2 ;
对于 C ,之前的字符是 ’B’ ,输出 2B , count=1 , c=’C’;
对于 C ,之前的字符是 ’C’ , count=2;
对于 C ,之前的字符是 ’C’ , count=3;
最后输出 3C 。
输出的结果是 A2B3C
参考代码如下:
/*
* 字符串编码
*/
public static void test5(String str){
int count=1;
char c=str.charAt(0);
for(int i=1;i<str.length();i++){
if(str.charAt(i)==c){
count++;
}else{
if(count!=1)
System.out.print(count);
System.out.print(c);
count=1;
c=str.charAt(i);
}
}
if(count!=1)
System.out.print(count);
System.out.print(c);
}

C语言ACM趣味和经典习题190例.zip ACM新手必备的编程题,C语言经典算法和习题大全。囊括大部分的算法和习题,编程必备。每天一道必成高手。 立即下载

相关推荐

ACM算法集合(涵盖各类算法题型+分析+源码)

1、适用于有意参加ACM编程竞赛、提升个人编程思想的人 2、本文件包含ACM的绝大多数算法题型+分析+源码,帮你快速掌握算法,题型范围广泛:数学问题、字符串处理、计算几何、数论、图论、排序/查找、数据结构。 3、题型全面,比如:大数阶乘、大数乘法运算、精度计算、进制转换、判断两线段是否相交、队列、树、图、快排等等..

VC调用ACM音频编程接口压缩Wave音频

 摘要: 本文介绍了在Microsoft Visual C++ 6.0下如何调用ACM(Audio Compression Manager,音频 压缩管理器)音频压缩编程接口对原始录入的Wave音频进行数据压缩。  关键字:ACM、CODECs、Wave音频、音频编码压缩  引言  音频和视频是多媒体应用程序向用户提供信息的主要方式,这些音频、视频数据一般都具有较高的采样率,经过压缩的原始数据

772

ACM的codes编码器实现的 音频压缩

利用低级音频函数WaveX,如waveinopen等函数,实现的语音压缩。

实现能效升级 | 基于ACM32 MCU的冰箱压缩机变频方案

它从吸气管吸入低温低压的制冷剂气体,通过电机运转带动活塞对其进行压缩后,向排气管排出高温高压的制冷剂气体,为整个制冷循环提供源动力。ACM32G103主频高,支持浮点运算和DSP,内置CORDIC,可以轻松实现上述的SVPWM产生器,Park/Clark变换,PI控制器,以及转子位置观测器。非线性模块的思路就是把估算的磁链的幅值与实际磁链幅值的差,作为估算的磁链分量的补偿项。• eFlash:320KB,加密存储,4KB I-Cache,4KB D-Cache,支持Flash加速0等待执行。

Qingniu01的博客 1928

Acm编程接口实现压缩

利用Windows的ACM(Audio Compression Manager)编程接口实现声音数据的压缩。

VC中调用ACM编程接口的音频压缩方法.zip

VC中调用ACM编程接口的音频压缩方法.zip

ACM-ICPC真题讲解:“哈夫曼编码”

哈夫曼编码是一种非常实用的数据压缩技术,掌握它对于解决实际问题和参加编程竞赛都有很大的帮助。希望这篇博客能帮助大家更好地理解哈夫曼编码,并在ACM-ICPC等竞赛中取得好成绩。

緒山 まひろ 828

Docker网络冲突?手把手教你解决Dify社区版无法访问172.18.0.0网段的问题

本文详细解析了在部署Dify社区版时,因Docker默认网段与局域网冲突导致无法访问172.18.0.0网段的问题。通过剖析Docker网络原理,提供了修改Docker守护进程默认地址池的根治方案,并介绍了在Compose文件中指定自定义网络等备选方法,帮助用户彻底解决网络冲突,保障服务稳定运行。

p8q9r0的博客 485

ACM-音频编解码器管理器

概述 ACM是Audio Compression Manager或Audio Codec Manager的缩写,是音频压缩管理器或音频编解码器管理器。 音频数据一般都具有较高的采样率,经过压缩的原始数据才具有实用价值,否则不仅要占用大量存储空间而且在播放或进行网络传输时效率也是非常低下的,所以音频数字压缩编码在多媒体应用中有着广泛而又重要的用途。 音频的编码压缩方式有许多种,这些不同的压缩方式有着不同的数据压缩比和还原音质,具体的编码格式和算法更是大相径庭。多数协议都比较复杂,普通程序难以实现其加、解

顺其自然~专栏 1733

【随机过程】第二章——随机过程概论

随机过程概论,说明《随机过程》课程的教学大纲,对随机过程概念、研究对象和研究方法做了简要介绍。

weixin_45225032的博客 1365

知识抽取框架OneKE

OneKE 中指令的格式采用了类 JSON 字符串的结构,本质上是一种字典类型的字符串。优化知识抽取的性能不仅能够强化模型对世界知识的理解和应用,还能够构建知识要素之间的跨领域的深度关联和依赖,这些都是大规模知识图谱构建的关键依赖。一直是知识图谱大规模落地的关键难题之一,因为真实世界的信息高度碎片化、非结构化,大语言模型在处理信息抽取任务时仍因抽取内容与自然语言表述之间的巨大差异导致效果不佳,自然语言文本信息表达中因隐式、长距离上下文关联存在较多的歧义、多义、隐喻等,给知识抽取任务带来较大的挑战。

qq_32907491的博客 3211
上一篇: ACM详解(6)——栈
下一篇: ACM详解(8)——加密
Java_Web_Book
博客等级 码龄18年 8粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值