Skip to content

About

个人 C++23 算法竞赛模板库,包含验证程序、本地随机对拍和 Library Checker AC 记录。

Resources

Stars

1 star

Watchers

0 watching

Forks

Latest commit

 

History

1 Commit

Folders and files

Repository files navigation

我的算法竞赛代码库

C++23 算法竞赛代码库。模板按算法分类,验证程序单独保存;逐步加入自己理解并验证过的算法。

目录

cp-library/
├── template.cpp                 # 比赛起手式
├── data_structure/
│   ├── dsu.hpp                  # 并查集
│   ├── fenwick.hpp              # 树状数组
│   ├── sparse_table.hpp         # 稀疏表
│   └── trie_xor.hpp             # 01 字典树
├── common/                      # 原 header 的类型、宏、基础算法、I/O、调试工具
├── header/                      # 原文件名的转发入口,ds.hpp 另提供 legacy::DSU
├── graph/                       # 图论,待积累
├── math/                        # 模整数 modint.hpp、组合数 comb.hpp
├── string/                      # 小写字母字典树 trie.hpp
├── notes/
│   └── pitfalls.md              # 易错点和补题复盘
├── verify/
│   ├── unionfind.test.cpp       # Library Checker 验证入口
│   ├── dsu.unit.cpp             # DSU 接口与多实例检查
│   ├── header.unit.cpp          # 迁入模板的边界、随机对拍与 I/O 检查
│   └── samples/                 # 官方样例
├── tools/
│   ├── check.py                 # 本地编译、样例和随机对拍
│   └── bundle.py                # 展开本地头文件,生成单文件提交
└── build/                       # 生成物,不加入版本管理

开始使用

需要 Python 3.9+ 和支持 C++23 模式的编译器。不依赖第三方 Python 包。 原有 DSU 支持 GCC、Clang 和 MSVC;Windows 会自动尝试已安装的 Visual Studio C++ Build Tools,仅影响当前子进程环境。 起手式已接入你的快读、基础算法和 debug 头文件,保留 GNU 竞赛写法,使用 bits/stdc++.h、内建函数和 128 位整数,需 GCC 或支持这些扩展的 Clang;MSVC 只检查原有 DSU 部分,并明确提示跳过 GNU 起手式与迁入模板。

本库采用最新正式发布的 C++23 标准;C++26 仍在制定中,暂不作为默认标准。 检查脚本对 GCC/Clang 使用 -std=c++23,对 MSVC 使用 /std:c++23preview 和 /Zc:__cplusplus(需支持该选项的版本,例如本机 MSVC 19.44)。 各编译器的 C++23 特性支持仍有差异,使用新特性时需同时确认本地编译器与目标 OJ 的支持情况。

默认工作目录位于 WSL Ubuntu 的 Linux 文件系统:/home/floze/ICPC/cp-library。 在 WSL 终端执行:

cd /home/floze/ICPC/cp-library
python3 tools/check.py

这个命令会先运行工具回归测试,再编译起手式与验证程序,检查并查集接口,运行官方样例,以及用独立的朴素实现对拍 100 组随机数据。 还会编译展开后的提交文件,确保单文件形式可以运行。出现不匹配、编译失败或超时会返回非零退出码。 在 GCC/Clang 下还会检查迁入模板、每个头文件独立/重复 include、ONLINE_JUDGE 下调试宏不求值,以及迁入模板展开后的运行结果。 可用 python3 tools/check.py --cxx g++ 指定编译器。 Windows 下使用脚本时,可将 python3 换成 python。 也支持 --cxx 指定编译器完整路径;Windows 下指定 cl.exe 时,会加载该编译器所属的 Visual Studio 工具链环境。

template.cpp 已定义 Scanner rd(stdin)、Printer wt(stdout),写题时使用 rd >> x、 wt << x << '\n' 和 debug(x)。具体示例、多组数据及单文件提交见 起手模板用法。

提交到 Library Checker

  1. 打开 Unionfind。

  2. 生成包含模板和 main 的单文件:

    python3 tools/bundle.py verify/unionfind.test.cpp
  3. 打开生成的 build/unionfind.test.submit.cpp,复制全部内容。

  4. 在题目页的 Submit 区域选择支持 C++23 的编译选项(常见名称为 C++23 或 GNU++23),粘贴并提交;按网站提示自行登录。若该 OJ 不提供 C++23,需确认代码所用特性可在其支持的标准下编译后再提交。

  5. 在线 AC 后,在下方索引记录提交链接。

网页无法读取本地的 #include "../data_structure/dsu.hpp",因此需要先展开。 展开脚本仅面向本库的普通头文件:本地引用应使用独立一行、无条件的双引号 include;每个文件展开一次。 支持 include 行上的注释,保留注释与字符串中的示例文本;宏形式或跨行 include 会明确报错。 不要用它处理依赖条件编译或多次包含技巧的第三方库;标准库的尖括号 include 会保留。

模板索引

算法 模板 验证入口 验证题 在线状态
并查集 dsu.hpp unionfind.test.cpp Unionfind AC
树状数组 fenwick.hpp point_add_range_sum.test.cpp Point Add Range Sum AC
区间树状数组 fenwick.hpp header.unit.cpp 本地随机对拍 未在线验证
稀疏表 sparse_table.hpp staticrmq.test.cpp Static RMQ AC
01 字典树 trie_xor.hpp set_xor_min.test.cpp Set Xor-Min AC
小写字母字典树 trie.hpp header.unit.cpp 本地随机对拍 未在线验证
固定 / 动态模整数 modint.hpp header.unit.cpp 本地算术与边界检查 未在线验证
组合数 / 排列 / 卡特兰数 comb.hpp header.unit.cpp 本地递推对拍 未在线验证

类型、宏、基础算法、快读快写及调试工具见 common。 迁移路径、下标差异和必要修复见 header 迁移说明。

官方题目格式的入口另有 verify/point_add_range_sum.test.cpp、verify/staticrmq.test.cpp 和 verify/set_xor_min.test.cpp;最后一份通过翻转异或值的大小顺序,用最大异或模板回答最小异或题。 可用 tools/bundle.py 生成对应的单文件提交。

除一键离线检查外,可在 WSL 使用 Python 3.11+ 运行 python3 tools/official_check.py, 下载固定提交的 Library Checker 四道题的全部测试生成器和参考解,在本地逐例比较输出。 需要 GCC 和首次下载时的网络;数据与报告位于 build/official/,结果不代表在线 AC。 若 WSL 下载不畅,可先在 Windows 运行 python tools/official_check.py --download-only, 再回到 WSL 运行上面的命令。 最近一次结果、覆盖范围和复现命令见 验证记录。

添加新模板

  1. 放进对应分类,注明用途、前提、复杂度、编号、接口和数值范围。
  2. 在 verify/ 添加调用该模板的完整验证程序,按目标题目约定读写数据。
  3. 在文件顶部添加 #define PROBLEM "题目地址",方便后续接入 verification-helper。
  4. 补充样例和有意义的边界检查,再在此添加索引。
  5. 更新 tools/check.py 的运行检查项。它会自动编译分类目录中的头文件,但新算法的运行验证仍需显式接入。

默认数组与顶点从 0 开始,区间接口优先使用 [l, r)。具体模板需要明确标注。 迁入模板保留旧接口:Fenwick/FenwickR 和 SparseTable 使用 1-based 闭区间;legacy::DSU 使用旧 1-based/unite 接口,全局 DSU 仍是 0-based/merge。 暂未接入 GitHub Actions 或 verification-helper;当前可直接进行本地检查和手动在线提交。

Git

初始化后可通过 git status 查看文件。每次添加或修复模板时,连同验证程序一起提交。 build/ 与可执行文件已被忽略。 公开仓库:FlozeIII/cp-library。

About

个人 C++23 算法竞赛模板库,包含验证程序、本地随机对拍和 Library Checker AC 记录。

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages