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 小时前
【动态规划】P10726 [GESP202406 八级] 空间跳跃|普及+
c++·算法·动态规划·洛谷
Chester_19992 小时前
CSP202312C.树上搜索
开发语言·数据结构·c++·蓝桥杯·stl
见叶之秋3 小时前
【C++】String类的使用(含模拟实现)
java·开发语言·c++
wuminyu4 小时前
Linux内核线程调度与虚拟线程调度机制系统级深度剖析
java·linux·c语言·jvm·c++
xxwxx__5 小时前
深入理解 C++ 继承:从基础语法到底层原理全解析
c++
键盘会跳舞5 小时前
【C++多线程】多线程性能调优:伪共享、缓存行对齐与吞吐优化
c++·多线程·多线程调优
学习星球6 小时前
编辑距离——二维 DP 的“最小操作“艺术
c++·leetcode·java-consul
OPEN-F6 小时前
ROS2系列教程:tf2坐标变换详解(C++/Python)
开发语言·c++·python
暖焰核心6 小时前
迭代器与模板的结合——stl的list
c++·windows·list