#P1439. 【华为】2024-9-13-第一题-数据解码

【华为】2024-9-13-第一题-数据解码

题目描述

指定有一段经过编码的二进制数据,数据由0个或多个"编码单元"组成。"编码单元"的编码方式存在如下两种:

1.简单编码单元如下所示,其中:

tagtag所占长度须为11字节,其值须为0×F00\times F0

singlevaluesingle-value的长度固定为44字节

2.复杂编码单元如下所示,其中:

tagtag所占长度须为11字节,其值须为0×F10\times F1

repeatrepeat所占长度固定为11字节,用于指示值在解码后消息中重复的次数

lenlen所占长度固定为44字节,用于指示值的字节数,lenlen使用大端序表示

值部分必须由0个或多个"编码单元"组成,且长度必须为lenlen字段所指示的字节数

编码后的数据必须完全符合上述两个原则,不允许有任何冗余的字节,请根据上述规则对一段编码后的数据进行校验,如果完全符合上述约束则输出解码后的长度,否则输出1-1

输入描述

输入一行编码后的二进制数据,按字节1616进制表示,如F0  00  08  09  00F0\;00\;08\;09\;00表示一串55字节的编码后数据

输入的字节数n(0n105)n(0\le n\le 10^5)

输出描述

输出解码后的值的字节数,不符合约束返回1-1

样例1

输入

F1 02 00 00 00 05 F0 01 02 03 04

输出

8

样例解释

该码流存在一个复杂编码单元,其中包含一个简单编码单元(内容44字节),复杂编码单元的重复数为22,所以解码后的总长度为88字节

样例2

输入

F1 01 00 00 00 04 F0 01 05

输出

-1

样例解释

第一个编码单元是复杂编码单元,重复数为11,长度为44,但是长度后的内容仅有33字节,码流不合法,返回1-1

样例3

输入

F1 01 00 00 00 06 F0 00 00 00 03 03 03

输出

-1

样例解释

第一个编码单元为复杂编码单元,重复数为11、长度为66,其中的内容从第一个字节开始为一个简单编码单元,

但简单编码单元后存在数据 0303 0303 既不属于简单单元,也不属于复杂编码单元,为冗余数据,整体数据不合法、应输出1-1