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时不需要(还是要仔细读题)。

相关推荐
H.莓飛1 小时前
【C++】【STL】vector_OJ题
linux·服务器·开发语言·数据结构·c++·visual studio
Rabitebla1 小时前
【Linux操作系统】进程篇(十一):进程程序替换——从底层原理到 exec 函数族
linux·服务器·c++·笔记·学习·算法
沫璃染墨2 小时前
从零入门计算机网络系列(十五):TCP可靠传输机制详解——从序号与确认应答到乱序处理
服务器·网络·c++·tcp/ip·tcp
青少儿编程课堂2 小时前
蓝桥杯·全国青少年信息素养大赛·电子学会Python/C++考级:Bellman-Ford与SPFA含负权最短路及负环检测全解析
c++·python·算法·bfs·信息学竞赛
旖旎夜光2 小时前
【C++ 基础入门】类和对象(下):初始化列表、static 成员、友元与内部类
c++·笔记·学习
j7~3 小时前
【C++ 八股文】(篇四)C++11 新特性
开发语言·c++·面试·c++11·八股文
eggwyw3 小时前
C++中大括号的用法合集
开发语言·c++
xiaoye-duck3 小时前
《C++ 项目:手写大模型接入 SDK》本地 Ollama 部署与适配
开发语言·网络·c++·语言模型
octopus_c3 小时前
STL 之 string:auto 与范围 for、常用接口、模拟实现与深浅拷贝
开发语言·c++·算法
汉克老师14 小时前
CSP-J 2026 第二轮入门组真题解析(第一题 、旅游)
c++·csp-j·信息学竞赛·小学生学c++