运行结果
解题思路
很暴力的模拟题,基本不用数据结构,只要思路不乱,注意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