六级编程题 50 分,按真题统计 DP 是王(7/16)、树与搜索第二(5/16)、栈队列做工具。这 7 个模板覆盖六级大纲可拿分核心(另含完全二叉树、二分图染色两处真题补充)。目标是合上清单限时默写到能 AC。每个模板可一键盖住自测。
用法:每个模板 ①盖住骨架自己默写 → ②对照检查 → ③做自测题限时 AC → ④回看易错点。所有骨架均为 C++14,已编译验证。
大数组开全局;计数 / 求和题一律 long long,要取模就随时取模。
n≤10)几乎都在暗示"可以暴力 DFS"。宁可一道满分一道部分分,也别两道都卡死。used[i]=false),否则只走一条路。dep==n 写对,别越界。选i / 不选i 两支。dist(别等出队再标),否则同点反复入队。从某点染 1,每个邻居染对方色:col[v] = 3 - col[u](BFS/DFS 都行)。树一定是二分图;"偶数步可达" = 与起点同色的点,答案就是同色点个数。
根编号 1:左孩子 2*i、右孩子 2*i+1、父亲 i/2。层序遍历就是按下标 1..n 顺序扫。
向上 i/=2、向下走时下标可能爆 int,记得用 long long。
fa 参数,if(v!=fa) 防止走回头路。sz[u] 要在递归回来后累加。写 DP 先写清:①状态 dp[i] 表示什么 ②转移方程 ③初始化。最大子段和:dp[i]=max(a[i], dp[i-1]+a[i]),答案取所有 dp[i] 最大。
dp[0](或边界小项)必须对。long long。i>=j 防越界。j 从大到小;完全背包(每件无限拿)才从小到大。j>=w[i] 才转移。% K;判满是 (tail+1)%K==head(牺牲一个位置)。pop() 不返回值,要先 top()/front() 取再 pop()。empty()。return r; 把子树接回去。n≤10、n≤20 → 直接上 DFS / 全排列暴力,先拿 40%-60% 部分分。g = i ^ (i>>1))、OOP(封装 / 继承 / 多态)只在选择 / 判断题出现,记原理即可。| 阶段 | 默写模板 | 限时自测(≤40 分钟/题) |
|---|---|---|
| 第 1 天 | 4 线性 DP · 5 背包 | P10250 → B3873 |
| 第 2 天 | 1 DFS · 2 BFS | P10377 → P11246 |
| 第 3 天 | 3 树遍历 · 7 BST | P10722 / P11375 |
| 第 4 天 | 6 栈队列 + 全部盖住各默 1 遍 | 一套真题 2 道编程题 |
GESP6 · 六级编程模板默写清单 · C++14 · 离线可用