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

相关推荐
倒头就睡的小比特4 天前
算法竞赛C++常用的STL
c++·算法
weilx12344 天前
C++笔记-文件IO-<fcntl.h>
c++
Smileyqp沛沛4 天前
前端?C++ ?较大差异基础罗列
c++·基础·前端转c++
C语言小火车4 天前
C/C++ 为什么需要编译器?
开发语言·c++
旖旎夜光4 天前
力控面试题 01.01: 判定字符是否唯一(位运算) —— 题解
c++·学习·算法·leetcode·力控
吞下星星的少年·-·4 天前
C++ 萌新语法入门篇
c++·算法比赛
霍霍的袁4 天前
【C++】map 和 set 的使用 | 从用法到底层
开发语言·c++·学习·visual studio
another heaven4 天前
【算法/C++ MD5算法能否逆解码?原理、C++实现与同类哈希算法对比】
c++·算法·哈希算法
程序猿编码4 天前
告别改源码适配模型:纯 C++ 可配置 LLM 推理引擎,全格式全结构兼容
c++·大模型·llm·推理引擎
此生决int4 天前
深入理解C++系列(20)——C++11(下)
开发语言·c++