CSP 第3题训练 Day 5|CSP202509C HTTP 头信息|Blog A

一、基本信息

Day:9.1

题目:CSP202509C HTTP 头信息

写码前保证分:40 分

写码前目标分:40 分

二、写码前规格压缩卡

三、写码前取分判断

本题主要需要处理 HPACK 的三种指令:

表格引用指令;

字面量并索引指令;

字面量不索引指令。

题目的子任务中:对于 40% 的数据,仅包含表格引用指令和字面量不索引指令,并且不包含 Huffman 编码字符串。

因此我决定第一版直接完成前 40% 的情况。

当前版本主要实现:

  1. 读取静态表中的键值对;
  2. 处理表格引用指令 1 i;
  3. 处理字面量不索引指令 3 0 k v;
  4. 处理字面量不索引指令 3 i v;
  5. 对普通字符串进行基本处理;
  6. 如果字符串以 HH 开头,则去掉最前面的一个 H。
    因此写码前保证分定为 40 分。
    四、完成的代码
cpp 复制代码
#include <iostream>
#include <map>
#include <string>
using namespace std;
using ll = long long;
int main(){
    int s,d;
    cin>>s>>d;
    map<int,pair<string,string> > mp;
    for(int i=1;i<=s;i++){
        string s1,s2;
        cin>>s1>>s2;
        mp[i]={s1,s2};
    }
    string H;
    cin>>H;
    int n;
    cin>>n;
    while(n--){
        int op;
        cin>>op;
        if(op==1){
            int a;
            cin>>a;
            cout<<mp[a].first<<" "<<mp[a].second<<endl;
        }else if(op==3){
            int a;
            cin>>a;
            if(a==0){
                string k,v;
                cin>>k>>v;
                string s3=k,s4=v;
                if(k[0]=='H'&&k[1]=='H'){
                    s3=k.substr(1);
                }
                if(v[0]=='H'&&v[1]=='H'){
                    s4=v.substr(1);
                }
                cout<<s3<<": "<<s4<<endl;
            }else{
                string s1=mp[a].first;
                string v;
                cin>>v;
                string s3=s1,s4=v;
                if(s1[0]=='H'&&s1[1]=='H'){
                    s3=s1.substr(1);
                }
                if(v[0]=='H'&&v[1]=='H'){
                    s4=v.substr(1);
                }
                cout<<s3<<": "<<s4<<endl;
            }
        }
    }
    return 0;
}

五、主要卡点

1.开始容易把三种指令混在一起,题目中有三种指令:

1 i

2 0 k v / 2 i v

3 0 k v / 3 i v

一开始看起来比较像,后面先把它们分开以后思路清楚很多。当前 40 分版本只需要处理:1 3 所以我先不碰 2 指令和动态表。

  1. 指令中又分成两种情况,字面量不索引指令有:

3 0 k v和:3 i v

如果编号是 0,字段名需要直接从输入中读取;如果编号不是 0,字段名需要从表格中根据编号取得。因此代码中需要分情况处理。

3.又需要记录编号,又要记字段名和字段值,善用map和pair会好写很多

4.对于开头双H的处理只在op3时进行处理,op1时不需要(还是要仔细读题)。

相关推荐
黎相思2 小时前
LRU Cache
c++·缓存
UIU1142 小时前
P1003 [NOIP 2011 提高组] 铺地毯
数据结构·c++·算法
xxwl5853 小时前
区域赛算法模版第四章---数据结构
数据结构·c++·算法
余额瞒着我当琳5 小时前
哈希表底层原理解析,直接定址法,哈希冲突,负载因子,哈希函数,开放定址法
java·c++·哈希算法·散列表
xxwl5855 小时前
区域赛算法模版第五章---数学与数论
c++·笔记·算法
局部有解5 小时前
LeetCode Hot100 438 找到字符串中所有字母异位词
c++·算法·leetcode
David猪大卫6 小时前
【C++修炼】string类:string类的模拟实现
c语言·开发语言·数据结构·c++·经验分享·笔记·学习
WL学习笔记7 小时前
模板初阶(C++)
开发语言·c++·后端·模板初阶
埃伊蟹黄面7 小时前
面试常问题目 —— STL
c++·面试·职场和发展·stl
CHANG_THE_WORLD7 小时前
ida-multi-mcp-跨版本逆向实战博客
c++