CCF-CSP认证202305-3:解压缩(AC代码+超详细解析)

本文详细解析了CCF CSP认证中的一道解压缩题目,通过暴力模拟实现,主要涉及字节转换、数据结构使用及状态机设计。代码包括CharToInt、PrintInt等关键函数,以及主函数中的状态切换逻辑。
摘要由CSDN通过智能技术生成

运行结果

解题思路

很暴力的模拟题,基本不用数据结构,只要思路不乱,注意l-1就能轻松AC

数据结构方面:一个vector维护已输出的内容,一个循环queue维护需要回溯引用的内容

代码分析

输出容器 output

维护已经输出的内容,用字节对应的整数作为元素

vector<int> output;
ll output_length = 0;

函数 CharToInt

将字节转换成整数返回

int CharToInt(char HighByte, char LowByte)
{
	int H = ('0'<=HighByte && HighByte<='9') ? HighByte-'0' : HighByte-'a'+10;
	int L = ('0'<=LowByte && LowByte<='9') ? LowByte-'0' : LowByte-'a'+10;
	return H * 16 + L;
}

函数 PrintInt

输出整数对应的字节格式,并适时输出换行

void PrintInt(int x)
{
	int H = x / 16, L = x % 16;
	char HighByte = (0<=H && H<=9) ? H+'0' : H+'a'-10;
	char LowByte = (0<=L && L<=9) ? L+'0' : L+'a'-10;
	cout<<HighByte<<LowByte;
	if(++output_length % 8 == 0)	cout<<endl;
}

函数 Print_ConstData

读取并输出指定长度的字面量

void Print_ConstData(ll const_l)
{
	char HighByte, LowByte;
	while(const_l--) {
		cin>>HighByte>>LowByte;
		int Byte = CharToInt(HighByte, LowByte);
		PrintInt(Byte);
		output.push_back(Byte);
	}
}

函数 Print_VarData

根据o和l输出指定长度的回溯引用,这里维护了一个循环队列,循环输出指定长度的内容

void Print_VarData(ll var_o, ll var_l)
{
	queue<int> var_output;
	for(ll i=0; i<var_o && i<var_l; ++i)
		var_output.push(output[output_len
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值