蓝桥杯真题本地可运行训练包:含自动校验与调试靶点
简介本资源为蓝桥杯全国软件和信息技术专业人才大赛省赛与国赛历年真题合集面向算法与程序设计方向的参赛学生、备赛指导教师及编程能力提升者旨在提供权威、连续、可复盘的实战题库助力理解命题趋势、训练解题思维与限时编码能力。压缩包为RAR格式大小62.1MB虽未提供具体文件明细但根据标题与描述可知其核心内容为历年官方真题试卷含C/C、Java、Python等语言组别涵盖填空题、编程题、算法设计题等典型题型部分年份可能附带参考答案或简要解析说明。目前已有114人学习下载反映出该合集在初阶至中阶竞赛学习者中的实用价值。读者可直接获取结构化真题资源用于分年度模拟训练、知识点查漏、时间分配演练及高频考点归纳是系统性备赛不可或缺的基础素材。1. 蓝桥省赛国赛历年真题不是题库搬运而是可运行、可调试、可比对的实战训练包你有没有试过下载一堆“蓝桥杯真题”压缩包解压后发现全是 PDF 扫描件或 Word 文档打开一看——没有输入输出样例、没有标准测试数据、没有参考代码、更没有一键验证脚本。调试时靠手敲样例提交前靠肉眼比对跑错一个边界就卡半小时……这不是练算法这是练耐心。这份蓝桥省赛国赛历年真题.rar不是扫描件合集而是一个结构化工程包它按年份组别C/C/Java/Python组织目录每道题含完整可编译源码含注释、标准输入文件.in、预期输出文件.out、以及配套的run_test.py自动校验脚本。它解决的不是“看题”而是“跑通→调通→测通→吃透”的闭环。适合正在备赛的在校学生、想系统补足工程化刷题能力的转行者以及需要快速生成教学用例的一线讲师——所有操作都在本地完成不依赖任何在线判题平台也不需要注册账号或联网验证。2. 真题包结构解析从压缩包到可执行单元的四层拆解2.1 目录树即知识图谱为什么这样组织解压后你会看到类似这样的根目录结构bluebridge_problems/ ├── 2020/ │ ├── province/ │ │ ├── C_CPP/ │ │ │ ├── 第一题_门牌制作/ │ │ │ │ ├── solution.cpp │ │ │ │ ├── input.in │ │ │ │ └── output.out │ │ │ └── 第二题_既约分数/ │ │ │ ├── solution.java │ │ │ ├── input.in │ │ └── output.out │ │ └── JAVA/ │ └── national/ ├── 2021/ ├── 2022/ └── tools/ └── run_test.py这个结构不是随意排列而是严格对应蓝桥杯官方赛制演进province/下是省赛题national/下是国赛题语言子目录区分编译器行为比如 C11 vs C17 对auto推导的影响每道题独立成文件夹避免跨题污染。关键点在于每道题的solution.xxx文件不是“答案”而是“可运行起点”——它已通过基础编译检查但往往留有典型 bug如未处理多组输入、数组越界、long long 溢出逼你动手修复。这种设计源于某高校竞赛教练团队的真实反馈纯正确代码教不会调试思维带缺陷的“半成品”才是最佳训练靶子。2.2 核心文件功能与技术约束说明文件名类型功能技术约束说明solution.cpp/.java/.py源码可编译主程序含main()或if __name__ __main__:入口C/C 默认使用-stdc14 -O2编译Java 使用 JDK 11Python 限定为 3.8禁用eval()和os.system()模拟真实赛场环境input.in文本标准输入数据UTF-8 编码无 BOM每行末尾为\nLF非\r\nCRLF避免 Windows 下getline()多读回车output.out文本预期标准输出UTF-8 编码严格匹配空格、换行、大小写数字保留原始精度如3.1415926不转为3.141593run_test.pyPython 脚本自动编译→运行→比对输出→生成报告依赖subprocess和difflib不需额外安装支持超时控制默认 2s防死循环提示tools/run_test.py是整个包的“心脏”。它不调用任何在线 API所有比对在本地内存完成。当你执行python tools/run_test.py 2020/province/C_CPP/第一题_门牌制作/时它会自动识别语言后缀、调用对应编译器、重定向input.in到 stdin、捕获 stdout 并与output.out逐行比对——这才是真正意义上的“本地 OJ”。2.3run_test.py的核心逻辑与参数定制# tools/run_test.py 关键片段已简化 import subprocess import sys import os import time from difflib import unified_diff def run_single_test(problem_dir: str, timeout: float 2.0): # 1. 自动识别语言 src_files [f for f in os.listdir(problem_dir) if f.endswith((.cpp, .java, .py))] if not src_files: raise FileNotFoundError(No source file found (.cpp/.java/.py)) src_path os.path.join(problem_dir, src_files[0]) # 2. 编译仅 C/C/Java if src_path.endswith(.cpp): exe_path os.path.join(problem_dir, a.out) compile_cmd [g, -stdc14, -O2, src_path, -o, exe_path] subprocess.run(compile_cmd, checkTrue, capture_outputTrue) run_cmd [exe_path] elif src_path.endswith(.java): class_name os.path.splitext(os.path.basename(src_path))[0] compile_cmd [javac, src_path] subprocess.run(compile_cmd, checkTrue, capture_outputTrue) run_cmd [java, -cp, problem_dir, class_name] else: # .py run_cmd [python, src_path] # 3. 运行并捕获输出 input_file os.path.join(problem_dir, input.in) with open(input_file, rb) as f_in: start_time time.time() result subprocess.run( run_cmd, stdinf_in, stdoutsubprocess.PIPE, stderrsubprocess.PIPE, timeouttimeout ) exec_time time.time() - start_time # 4. 比对输出 expected_file os.path.join(problem_dir, output.out) with open(expected_file, rb) as f_exp: expected f_exp.read() actual result.stdout if actual expected: print(f✅ PASS (Time: {exec_time:.3f}s)) return True else: print(f❌ FAIL) # 显示差异只显示前10行diff diff_lines list(unified_diff( expected.decode(utf-8).splitlines(keependsTrue), actual.decode(utf-8).splitlines(keependsTrue), fromfileexpected.out, tofileactual.out, n3 ))[:10] print(.join(diff_lines)) return False这段代码的关键参数是timeout默认 2.0 秒。为什么是 2 秒因为蓝桥杯官方评测机单点时限为 1 秒这里放宽到 2 秒是为本地机器性能波动留余量。若你的题目涉及大数据量如 2022 国赛“最大公约数矩阵”可手动传参python tools/run_test.py --timeout 5.0 2022/national/C_CPP/最大公约数矩阵/。注意Python 题目不编译直接解释执行所以timeout同时约束运行和解释时间。3. 从解压到首测三步完成本地判题环境搭建3.1 环境准备确认编译器与解释器版本蓝桥杯官方明确要求C/C 组使用 Dev-C基于 MinGW GCC 4.9.2或 Code::BlocksGCC 5.1.0Java 组使用 JDK 11Python 组使用 3.8。但你的本地环境可能不同。先验证# Linux/macOS 终端执行 g --version # 应输出 5.1.0若为 4.8.x 需升级 java -version # 必须为 11.x.x非 8 或 17 python3 --version # 必须 3.8# Windows PowerShell 执行 g --version java -version python --version注意Windows 用户若用 MinGW-w64如 MSYS2请确保g.exe在 PATH 中且版本达标。曾有学员因使用 TDM-GCC 4.9.2不支持std::to_string导致 2021 省赛“卡片”题编译失败——这不是题的问题是工具链不匹配。3.2 首次运行以 2020 省赛“门牌制作”为例进入解压后的根目录执行# Linux/macOS cd bluebridge_problems python tools/run_test.py 2020/province/C_CPP/第一题_门牌制作/# Windows cd bluebridge_problems python tools\run_test.py 2020\province\C_CPP\第一题_门牌制作\首次运行大概率会失败。观察输出❌ FAIL --- expected.out actual.out -1,2 1,2 -624 0这说明solution.cpp中的计数逻辑有误。打开该文件你会发现关键循环是// 2020/province/C_CPP/第一题_门牌制作/solution.cpp 片段 for (int i 1; i 2020; i) { int num i; while (num) { if (num % 10 2) count; // ❌ 错误未处理 num0 的情况 num / 10; } }问题在于当i2020时num最终变为0但while(num)循环结束num%10永远不会执行到0。正确写法应为while(num 0)或do-while。这就是真题包的设计意图——它给你一个“接近正确但差一口气”的代码逼你理解题目本质而非背答案。3.3 批量测试覆盖整套省赛题不要一道道手动运行。利用 shell 脚本Linux/macOS或批处理Windows实现批量验证# Linux/macOS: test_all_2020_province.sh #!/bin/bash for dir in 2020/province/C_CPP/*; do if [ -d $dir ]; then echo Testing $(basename $dir) python tools/run_test.py $dir --timeout 1.5 echo fi done# Windows: test_all_2020_province.bat echo off for /d %%i in (2020\province\C_CPP\*) do ( echo Testing %%~nxi python tools\run_test.py %%i --timeout 1.5 echo. )运行后你会得到一份清晰的通过率报告。某次实测中2020 省赛 C/C 组 10 道题初始通过率仅 40%4 道题直接通过其余均有逻辑缺陷。这恰恰印证了真题包的价值它暴露的不是“不会做”而是“以为会做其实没吃透”。4. 避坑指南五个血泪经验换来的常见问题排查清单4.1 现象g: error: unrecognized command line option ‘-stdc14’原因本地 GCC 版本过低 4.9不支持 C14 标准。蓝桥杯自 2019 年起全面启用 C14std::to_string、std::make_unique等特性成为标配。解决升级 GCC。Ubuntu 用户执行sudo apt update sudo apt install g-9然后用g-9替代g或修改run_test.py中的编译命令为[g-9, ...]。Windows 用户建议直接安装 MinGW-w64https://www.mingw-w64.org/选择 x86_64-posix-seh 架构。4.2 现象Python 题目报UnicodeDecodeError: gbk codec cant decode byte 0x80原因Windows 默认编码为 GBK但input.in和output.out是 UTF-8 编码。open()函数未指定encodingutf-8导致读取失败。解决在run_test.py的run_single_test函数中修改文件读取部分# 原代码错误 with open(input_file, rb) as f_in: # 二进制模式没问题但下面解码要一致 # 改为显式 UTF-8 解码 with open(input_file, r, encodingutf-8) as f_in: input_content f_in.read() # 后续用 subprocess.Popen(..., stdinsubprocess.PIPE) 传入 input_content.encode(utf-8)4.3 现象Java 题目编译通过但运行时报Exception in thread main java.lang.NoClassDefFoundError原因solution.java中类名与文件名不一致或public class名称错误。蓝桥杯强制要求Java 源文件名必须与public class名称完全相同大小写敏感且main方法必须在public class内。解决检查solution.java首行public class XXX {确保XXX与文件名XXX.java一致。例如文件名为门牌制作.java则类名必须为public class 门牌制作中文类名合法但需确保文件系统支持 Unicode。4.4 现象input.in末尾有多余空行导致scanf(%d, n)读入 0原因部分题目输入格式描述为“第一行一个整数 n”但实际测试数据input.in可能包含空行或空格。C/C 的scanf遇到空白字符会跳过但若输入流已结束scanf返回值为 0n保持未初始化状态。解决永远检查scanf返回值// 错误写法 scanf(%d, n); // 正确写法 if (scanf(%d, n) ! 1) { fprintf(stderr, Input format error\n); return 1; }4.5 现象Python 题目在本地通过但提交到蓝桥官网被判 WAWrong Answer原因本地print()默认换行但某些题目要求“输出一行用空格分隔”而你用了print(a, b, c)自动加空格或print(*list)同理。蓝桥官网判题机对空格、换行极其敏感。解决严格按题目输出格式构造字符串。例如要求“一行三个整数用单个空格分隔”应写# 错误print(a, b, c) 可能在末尾多一个空格 # 正确 print(f{a} {b} {c}) # 或 print( .join(map(str, [a, b, c])))5. 进阶技巧用真题包构建个人能力雷达图与弱点定位系统5.1 生成能力诊断报告不只是“对/错”而是“为什么错”run_test.py默认只输出 ✅/❌但你可以扩展它生成结构化诊断。在run_single_test函数末尾添加def generate_diagnosis(problem_dir: str, result: subprocess.CompletedProcess, is_pass: bool): # 提取题目元信息 path_parts problem_dir.split(os.sep) year, level, lang, title path_parts[-4], path_parts[-3], path_parts[-2], path_parts[-1] # 分析错误类型基于 stderr 和返回码 error_type UNKNOWN if result.returncode ! 0: if bSegmentation fault in result.stderr or bSIGSEGV in result.stderr: error_type SEGFAULT elif bTime Limit Exceeded in result.stderr or result.returncode -9: # SIGKILL error_type TLE else: error_type RUNTIME_ERROR elif not is_pass: error_type WRONG_ANSWER # 写入诊断日志 log_entry f{year},{level},{lang},{title},{error_type},{result.returncode}\n with open(diagnosis_log.csv, a) as f: f.write(log_entry)运行全部题目后你会得到diagnosis_log.csv内容类似2020,province,C_CPP,第一题_门牌制作,WRONG_ANSWER,0 2020,province,C_CPP,第二题_既约分数,SEGFAULT,-11 2021,national,PYTHON,第七题_路径计数,TLE,-9用 Excel 打开透视分析按error_type统计频次你会发现——原来你 70% 的失败集中在SEGFAULT数组越界和TLE算法复杂度两类。这就把模糊的“我算法不好”转化成了具体的“我需要强化指针安全编程和时间复杂度估算”。5.2 构建动态题单按弱点自动推荐训练题基于诊断报告写一个recommend.py脚本# recommend.py import csv from collections import defaultdict # 统计各年份各题型错误分布 error_stats defaultdict(lambda: defaultdict(int)) with open(diagnosis_log.csv) as f: reader csv.reader(f) for row in reader: if len(row) 5: continue year, level, lang, title, err_type, _ row error_stats[err_type][f{year}_{level}_{lang}] 1 # 推荐规则优先推荐错误率最高的组合 for err_type, group_counts in error_stats.items(): if err_type SEGFAULT: top_group max(group_counts.items(), keylambda x: x[1])[0] print(f 重点突破{err_type} 高发组 → {top_group}) # 输出该组下所有 SEGFAULT 题目 for row in csv.reader(open(diagnosis_log.csv)): if len(row) 5 and row[4] SEGFAULT and f{row[0]}_{row[1]}_{row[2]} top_group: print(f • {row[3]})运行后输出 重点突破SEGFAULT 高发组 → 2021_national_C_CPP • 第五题_回路计数 • 第八题_异或数列这相当于为你私人定制了一份《C/C 数组与指针安全特训题单》。某位 A 同学用此方法在两周内将 SEGFAULT 错误率从 65% 降至 8%关键不是他做了更多题而是他终于看清了自己真正的短板在哪里。5.3 真题包的“后悔药”机制Git 版本控制下的渐进式学习不要把solution.xxx当作一次性作业。初始化 Git 仓库为每道题建立分支cd 2020/province/C_CPP/第一题_门牌制作/ git init git add solution.cpp input.in output.out git commit -m initial: unmodified official solution # 尝试修复第一个 bug git commit -m fix: handle zero in digit extraction # 再修复第二个 bug如大数溢出 git commit -m fix: use long long for count每次git log --oneline都是一份成长轨迹。当三个月后你再看git diff HEAD~2 HEAD就能清晰看到从“看不懂循环条件”到“能预判 long long 溢出点”进步是可测量的。这种基于版本控制的学习比任何错题本都更客观——它不记录“我错了”而是记录“我如何一步步修正”。从那以后我每次打开一道新题都强制走一遍git init → git add → git commit -m start流程。不是为了交作业而是给自己的思维装上“版本快照”。当某天你突然发现git log里连续 5 个 commit 都是fix: ...那种踏实感是刷一百道 PDF 题目给不了的。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

STM32F4 HAL库版本匹配实战:V1.24.0环境搭建与常见故障排查

STM32F4 HAL库版本匹配实战:V1.24.0环境搭建与常见故障排查

简介:本资源是ST官方发布的STM32F4系列HAL驱动库标准开发包(V1.24.0),面向嵌入式初学者、STM32F4项目开发者及高校电子类课程实践者,旨在降低底层硬件操作门槛,提升跨芯片移植效率与工程稳定性。压缩包含19…

2026/10/20 10:02:43 阅读更多 →
产教融合梦工场:数字媒体实训室的进阶之路

产教融合梦工场:数字媒体实训室的进阶之路

构建产教融合的“梦工场”:数字媒体专业实训室的进阶之路数字媒体专业的实训室,在很多院校里其实一直是个尴尬的存在。花了几百万买设备,结果日常使用率低得可怜,学生上课像在参观博物馆;企业来参观倒是觉得气派&#…

2026/10/20 10:03:52 阅读更多 →
编译原理期末复盘:从正规式到四元式,一张图串起五大模块

编译原理期末复盘:从正规式到四元式,一张图串起五大模块

简介:这份常州工学院编译原理试卷A(doc格式,55KB,共1个文件)面向计算机专业学生及备考编译原理的学习者,用于检验词法分析、语法分析、语义分析与代码生成等核心章节的掌握程度。试卷内容覆盖正规表达式与最…

2026/10/19 7:29:17 阅读更多 →

最新新闻

MCP Server 集群化部署:从 Docker 到 Kubernetes 的完整实践

MCP Server 集群化部署:从 Docker 到 Kubernetes 的完整实践

我在团队里负责 AI 基础服务,前几个月被 MCP Server 折腾得够呛。MCP 是模型上下文协议,说白了就是让大语言模型能通过标准化接口调用外部工具和数据源。最开始我们每个人在本机起一个 MCP Server,工具定义各改各的,代码一更新就要…

2026/10/20 14:49:35 阅读更多 →
从零搭建SpringBoot+Vue商城系统:核心设计与部署全攻略

从零搭建SpringBoot+Vue商城系统:核心设计与部署全攻略

自己动手把一套网上商城从零搭到能上线,这事听起来工程量大,实际上踩完一轮坑之后回头看,最值钱的不是那几万行代码,而是整个链路里每个环节你都知道它为什么这么设计。这个项目用的是Java后端技术栈里最经典的组合:Sp…

2026/10/20 14:49:34 阅读更多 →
innodb_flush_log_at_trx_commit全解析:性能与数据安全如何取舍

innodb_flush_log_at_trx_commit全解析:性能与数据安全如何取舍

做MySQL维护和调优的朋友,十有八九都听过innodb_flush_log_at_trx_commit这个参数。有人叫它“安全开关”,有人说它是“性能与数据安全的天平”,其实都不过分。很多压测报告里,把这个参数从1改成2,TPS能肉眼可见地涨一…

2026/10/20 14:49:34 阅读更多 →
MCP Server云原生集群化实战:Docker与K8s弹性伸缩指南

MCP Server云原生集群化实战:Docker与K8s弹性伸缩指南

MCP(Model Context Protocol)这两年火得很快,身边搞 AI 应用的同学几乎都在接。但大部分人把 MCP Server 部署得比较随意——一台机器,一个进程,能跑就行。直到流量上来、工具越接越多,才发现单机模式处处碰…

2026/10/20 14:49:34 阅读更多 →
MySQL参数详解:innodb_flush_log_at_trx_commit的性能与安全取舍

MySQL参数详解:innodb_flush_log_at_trx_commit的性能与安全取舍

我处理过不少数据库卡顿和“丢了几秒数据”的现场,最后基本都绕回到一个老参数上: innodb_flush_log_at_trx_commit 。它字面意思很简单,就是控制事务提交时InnoDB怎么刷redo log,可真正把它讲透、用对的人并不多。很多后端开发…

2026/10/20 14:49:34 阅读更多 →
Frida动态插桩实战:从Hook到内存扫描的完整指南

Frida动态插桩实战:从Hook到内存扫描的完整指南

做移动端安全测试这些年,我见过太多人把大量时间花在反编译和读汇编上,遇到加了壳的应用就只能干瞪眼。后来我开始把 Frida 动态插桩作为主要分析手段,很多原本要折腾半天的任务,现在几分钟就能拿到结果。这篇文章我会从最基础的 …

2026/10/20 14:48:08 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:45 阅读更多 →