这份笔记面向刚开始学习 C++ 和 ACM 算法的读者。讲解从具体问题出发,配有手算、过程图和带注释的代码;序言按不同基础安排阅读路线。
| 阅读入口 | 内容 |
|---|---|
| 在线阅读 | 按章节阅读,搜索主题和题号,点击放大图解 |
| 完整 Markdown | 笔记 v5.0,可下载后用 Typora 阅读 |
| PDF 下载 | 462 页,保留 Typora 主题与代码高亮,目录和每页均有页码 |
| 练习题解 | 107 道在线题目与 4 项面向对象练习,共 111 份解答 |
下载仓库后,把 Markdown 和同目录的 C艹学习笔记.assets 一起保存,插图就能随正文显示。完整笔记包括序言、C++ 语法基础、面向对象、解题方法论、批量输入与大整数、数据结构与算法、后记及附录。
先按序言选择适合自己的路线,跟着例子手算,再做对应练习。遇到推不下去的一步时,查题解中的分析或过程图;已经写出程序时,用同一份输入找出自己与参考过程第一次不同的地方。
题解按章节和题号整理,同一道题在不同章节出现时共用一份解答。每份参考程序都可以单独编译,统一使用序言中的竞赛模板,以 GNU C++17 编译。读懂后关掉答案再写一遍,把做错的输入留下来用于复习。
| 题解章节 | 题目数 |
|---|---|
| 语言基础与条件建模 | 16 |
| STL 容器与操作模拟 | 20 |
| 方法选择与事件模拟 | 4 |
| 大整数四则运算 | 5 |
| 枚举、前缀和、差分与排序 | 6 |
| 基础数论与快速幂 | 6 |
| 双指针、窗口与二分 | 7 |
| 贪心策略 | 5 |
| 递归、回溯、DFS、BFS 与记忆化 | 12 |
| 动态规划 | 14 |
| 树、并查集与图论 | 12 |
| 面向对象的四项练习 | 4 |
在本页用 Ctrl+F 查找题号。点击题名查看解答,点击“原题”回到评测平台。
| 题号 | 题解 | 所属章节 | 原题 |
|---|---|---|---|
| P1001 | A+B Problem | 语言基础与条件建模 | 原题 |
| P5703 | 苹果采购 | 语言基础与条件建模 | 原题 |
| P5710 | 数的性质 | 语言基础与条件建模 | 原题 |
| P1100 | 高低位交换 | 语言基础与条件建模 | 原题 |
| P5712 | Apples | 语言基础与条件建模 | 原题 |
| P5721 | 数字直角三角形 | 语言基础与条件建模 | 原题 |
| P5723 | 质数口袋 | 语言基础与条件建模 | 原题 |
| P1428 | 小鱼比可爱 | 语言基础与条件建模 | 原题 |
| P5732 | 杨辉三角 | 语言基础与条件建模 | 原题 |
| P1554 | 梦中的统计 | 语言基础与条件建模 | 原题 |
| CF4-A | Watermelon | 语言基础与条件建模 | 原题 |
| P5711 | 闰年判断 | 语言基础与条件建模 | 原题 |
| P5709 | 苹果和虫子 | 语言基础与条件建模 | 原题 |
| P1046 | 陶陶摘苹果 | 语言基础与条件建模 | 原题 |
| P5717 | 三角形分类 | 语言基础与条件建模 | 原题 |
| P1085 | 不高兴的津津 | 语言基础与条件建模 | 原题 |
| P5733 | 自动修正 | STL 容器与操作模拟 | 原题 |
| P1427 | 小鱼的数字游戏 | STL 容器与操作模拟 | 原题 |
| P1308 | 统计单词数 | STL 容器与操作模拟 | 原题 |
| P1093 | 奖学金 | STL 容器与操作模拟 | 原题 |
| P1177 | 排序 | STL 容器与操作模拟 | 原题 |
| P1059 | 明明的随机数 | STL 容器与操作模拟 | 原题 |
| P1160 | 队列安排 | STL 容器与操作模拟 | 原题 |
| P1449 | 后缀表达式 | STL 容器与操作模拟 | 原题 |
| P1241 | 括号序列 | STL 容器与操作模拟 | 原题 |
| P1996 | 约瑟夫问题 | STL 容器与操作模拟 | 原题 |
| P1540 | 机器翻译 | STL 容器与操作模拟 | 原题 |
| CF4-C | Registration System | STL 容器与操作模拟 | 原题 |
| P5266 | 学籍管理 | STL 容器与操作模拟 | 原题 |
| P2234 | 营业额统计 | STL 容器与操作模拟 | 原题 |
| P3370 | 字符串哈希 | STL 容器与操作模拟 | 原题 |
| P3378 | 堆 | STL 容器与操作模拟 | 原题 |
| P1631 | 序列合并 | STL 容器与操作模拟 | 原题 |
| P1886 | 滑动窗口 | STL 容器与操作模拟 | 原题 |
| P1440 | 求 m 区间内的最小值 | STL 容器与操作模拟 | 原题 |
| P2073 | 送花 | STL 容器与操作模拟 | 原题 |
| P1102 | A-B 数对 | 方法选择与事件模拟 | 原题 |
| CF702-B | Powers of Two | 方法选择与事件模拟 | 原题 |
| P2058 | 海港 | 方法选择与事件模拟 | 原题 |
| P1065 | 作业调度方案 | 方法选择与事件模拟 | 原题 |
| P1601 | 高精度加法 | 大整数四则运算 | 原题 |
| P2142 | 高精度减法 | 大整数四则运算 | 原题 |
| P1303 | A*B Problem | 大整数四则运算 | 原题 |
| P1480 | A/B Problem | 大整数四则运算 | 原题 |
| P1932 | 大整数五种运算 | 大整数四则运算 | 原题 |
| P2089 | 烤鸡 | 枚举、前缀和、差分与排序 | 原题 |
| P8218 | 求区间和 | 枚举、前缀和、差分与排序 | 原题 |
| P2367 | 语文成绩 | 枚举、前缀和、差分与排序 | 原题 |
| P3397 | 地毯 | 枚举、前缀和、差分与排序 | 原题 |
| P1908 | 逆序对 | 枚举、前缀和、差分与排序 | 原题 |
| P1496 | 火烧赤壁 | 枚举、前缀和、差分与排序 | 原题 |
| P1029 | 最大公约数和最小公倍数问题 | 基础数论与快速幂 | 原题 |
| P3383 | 线性筛素数 | 基础数论与快速幂 | 原题 |
| P1075 | 质因数分解 | 基础数论与快速幂 | 原题 |
| P1226 | 快速幂 | 基础数论与快速幂 | 原题 |
| CF742-A | Arpa’s hard exam and Mehrdad’s naive cheat | 基础数论与快速幂 | 原题 |
| P1217 | 回文质数 | 基础数论与快速幂 | 原题 |
| CF279-B | Books | 双指针、窗口与二分 | 原题 |
| P1638 | 逛画展 | 双指针、窗口与二分 | 原题 |
| P1182 | 数列分段 Section II | 双指针、窗口与二分 | 原题 |
| P1873 | 砍树 | 双指针、窗口与二分 | 原题 |
| P2678 | 跳石头 | 双指针、窗口与二分 | 原题 |
| P3382 | 三分 | 双指针、窗口与二分 | 原题 |
| P2249 | 查找 | 双指针、窗口与二分 | 原题 |
| CF996-A | Hit the Lottery | 贪心策略 | 原题 |
| P1803 | 线段覆盖 | 贪心策略 | 原题 |
| P1090 | 合并果子 | 贪心策略 | 原题 |
| P2240 | 部分背包问题 | 贪心策略 | 原题 |
| P1016 | 旅行家的预算 | 贪心策略 | 原题 |
| P1036 | 选数 | 递归、回溯、DFS、BFS 与记忆化 | 原题 |
| P1219 | 八皇后 | 递归、回溯、DFS、BFS 与记忆化 | 原题 |
| P1605 | 迷宫 | 递归、回溯、DFS、BFS 与记忆化 | 原题 |
| P5318 | 查找文献 | 递归、回溯、DFS、BFS 与记忆化 | 原题 |
| P1451 | 求细胞数量 | 递归、回溯、DFS、BFS 与记忆化 | 原题 |
| P1596 | 湖计数 | 递归、回溯、DFS、BFS 与记忆化 | 原题 |
| P1162 | 填涂颜色 | 递归、回溯、DFS、BFS 与记忆化 | 原题 |
| P1141 | 01 迷宫 | 递归、回溯、DFS、BFS 与记忆化 | 原题 |
| P1443 | 马的遍历 | 递归、回溯、DFS、BFS 与记忆化 | 原题 |
| P1135 | 奇怪的电梯 | 递归、回溯、DFS、BFS 与记忆化 | 原题 |
| P1434 | 滑雪 | 递归、回溯、DFS、BFS 与记忆化 | 原题 |
| P1242 | 新汉诺塔 | 递归、回溯、DFS、BFS 与记忆化 | 原题 |
| P1255 | 数楼梯 | 动态规划 | 原题 |
| P1115 | 最大子段和 | 动态规划 | 原题 |
| P1387 | 最大正方形 | 动态规划 | 原题 |
| P1020 | 导弹拦截 | 动态规划 | 原题 |
| P1439 | 两个排列的最长公共子序列 | 动态规划 | 原题 |
| P1435 | 回文字串 | 动态规划 | 原题 |
| P2758 | 编辑距离 | 动态规划 | 原题 |
| P1048 | 采药 | 动态规划 | 原题 |
| P1049 | 装箱问题 | 动态规划 | 原题 |
| P1616 | 疯狂的采药 | 动态规划 | 原题 |
| P1164 | 小 A 点菜 | 动态规划 | 原题 |
| P2842 | 纸币问题 1 | 动态规划 | 原题 |
| P1002 | 过河卒 | 动态规划 | 原题 |
| P2679 | 子串 | 动态规划 | 原题 |
| P4913 | 二叉树深度 | 树、并查集与图论 | 原题 |
| P3884 | 二叉树问题 | 树、并查集与图论 | 原题 |
| P3367 | 并查集 | 树、并查集与图论 | 原题 |
| P1551 | 亲戚 | 树、并查集与图论 | 原题 |
| B3643 | 图的存储 | 树、并查集与图论 | 原题 |
| P1330 | 封锁阳光大学 | 树、并查集与图论 | 原题 |
| P3371 | 单源最短路径(弱化版) | 树、并查集与图论 | 原题 |
| P4779 | 单源最短路径(标准版) | 树、并查集与图论 | 原题 |
| B3647 | Floyd | 树、并查集与图论 | 原题 |
| B3644 | 拓扑排序/家谱树 | 树、并查集与图论 | 原题 |
| P1807 | 最长路 | 树、并查集与图论 | 原题 |
| P3366 | 最小生成树 | 树、并查集与图论 | 原题 |
| OOP1 | 学生信息排序 | 面向对象的四项练习 | 自拟练习 |
| OOP2 | 成绩类的修改检查 | 面向对象的四项练习 | 自拟练习 |
| OOP3 | 通过 Shape 调用 Triangle 面积 | 面向对象的四项练习 | 自拟练习 |
| OOP4 | 二叉树节点的所有权 | 面向对象的四项练习 | 自拟练习 |
例如编译某一道题:
# 编译独立源文件,再让程序从标准输入读取本地数据。
g++ -std=gnu++17 -O2 code/P1182.cpp -o solution
./solution < input.txt运行仓库中的 python tests/verify.py 会编译全部参考实现、核对题面样例与手算例子。汉诺塔和拓扑排序存在多种合法输出,验证程序分别检查移动是否合法且步数最少,以及所有前驱是否先于后继输出。
做完一题后,记下自己卡住的具体步骤。比如迷宫回溯时忘了撤销标记,就拿一张小地图重新手算返回过程,再独立完成一道相近的题。复习时先运行之前留下的错误输入,看看现在能否解释当时的问题。
| 时间 | 更新内容 |
|---|---|
| 2025.10~2026.1 | 手打第一版。 |
| 2026.10.7 | 使用 GPT-6.1-Sol 整理结构,补充 C++ 基本语法,更新为第二版。 |
| 2026.10.8 | 更新第三版:修复若干表述不清晰的地方,添加页码,重新整理标题层级,将容器统一归入 STL 章节。 |
| 2026.10.8~10.9 | 详细扩充第三章,更新为第四版。 |
| 2026.10.9 | 添加后记和学习路线,建立 GitHub Pages 与练习题答案仓库。 |