1 条题解

  • 0
    @ 2025-3-23 20:14:29
    #include <iostream>
    #include <string>
    #include <vector>
    #include <sstream>
    #include <map>
    using namespace std;
    
    map<int ,pair<int,int>> readTLV(string input,vector<int>tags)
    {
    	int flag = 0;
    	map<int,pair<int, int>> result;
    	while (flag<input.length()-4)
    	{
    		//tag就是前两个字符,length是第3、4个字符
    		string tag=input.substr(flag,2);
    		string length=input.substr(flag+2,2);
    
    		//十六进制转十进制
    		int tagNum, lengthNum;
    		stringstream ss1;
    		ss1 << hex << tag;
    		ss1 >> tagNum;
    		stringstream ss2;
    		ss2 << hex << length;
    		ss2 >> lengthNum;
    
    		int valueOffset = (flag + 4) / 2;
    		flag += 4 + lengthNum * 2;
    		result[tagNum] = pair<int, int>(lengthNum, valueOffset);
    	}
    	return result;
    }
    int main(int argc, char *argv[])
    {
    	string input;
    	cin >> input;
    	int tagAmount;
    	cin >> tagAmount;
    	vector<int> tags;
    	for (int i = 0; i < tagAmount; i++)
    	{
    		int tag;
    		cin >> tag;
    		tags.push_back(tag);
    	}
    	map<int,pair<int, int>> results = readTLV(input,tags);
    
    	for (int tag:tags)
    	{
    		//没找到就输出0 0
    		if (results.find(tag) != results.end())
    			cout << results[tag].first << " " << results[tag].second << endl;
    		else
    			cout << "0 0";
    	}
    }
    
    
    
    • 1

    信息

    ID
    109
    时间
    1000ms
    内存
    256MiB
    难度
    5
    标签
    (无)
    递交数
    101
    已通过
    40
    上传者