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

运行结果

解题思路

很暴力的模拟题,基本不用数据结构,只要思路不乱,注意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_length-var_
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值