最大子段和的 O(n) 解法 —— Kadane 算法
最大子段和 Kadane 算法程序填空:横线填 currentSum + a[i],与 a[i] 取大表示“另起炉灶 vs 接着续”。附扫描柱形图解、9 步模拟表、初始化全负陷阱、复杂度对比与 CSP 考点总结。
BFS 为什么能求最短路?—— dist[v] = dist[u]...
BFS 程序填空:dist[v] = dist[u] + 1。附 BFS 分层扩散图解(0~3 层 dist 递增)、选项逐项排除、队列过程模拟表、BFS 等价无权图最短路的原理、复杂度与 CSP 考点总结。
快排的 partition 中 Lomuto 划分与 i+1 的由来
快排 Lomuto 划分的程序填空:横线处填 swap(a[i+1], a[right]),返回 i+1。附不变量分析、划分前后图解、递归调用要点(p 不参与递归)与复杂度、CSP 考点总结。
阅读程序题 40 分怎么拿满?—— 「手动模拟」三步法(含递归完整推演)
CSP 初赛阅读程序题占 40 分,失分主因不是不会写代码,而是在脑子里算错了。本文给出「手动模拟三步法」:30 秒定功能 → 画变量表/调用栈逐行记录 → 回表查答案,并完整推演 f(n)=f(n-1)+f(n-3) 递归题(答案 ...
n = 27 的 3n+1 循环要转多少圈?—— 冰雹数的忽上忽下
27 的 3n+1 序列(Collatz/冰雹数):打印 111 个数,从 82 到 1,峰值 9232。附完整轨迹折线图(蓝点奇数步上升、绿点偶数步下降)、手算模拟、死循环风险分析与 CSP-J 考点总结。
a << 2 | 1 到底先算谁?—— 位运算优先级的一个坑
a=3 时 (a << 2 | 1) 输出 13:<< 优先级高于 |,先左移 2 位得 12,再按位或 1 得 13。附位运算优先级顺序、易错写法对比(a<<(2|1)=24、a<<2+1=24)与 CSP-J 考点总结。
n &= (n-1) 到底做了啥?一行代码数出二进制里有几个 1
n &= (n-1) 是 Brian Kernighan 算法,每执行一次清掉最低位的 1,循环次数即二进制中 1 的个数。n=10(1010₂) 输出 2。附模拟过程、原理、复杂度对比、判断 2 的幂与 CSP-J 考点总结。
-5 >> 1 的结果是什么?—— 算术右移与向下取整陷阱
-5 >> 1 的结果是 -3:负数是算术右移(补符号位),等价于向下取整除法 floor(-5/2),而 -5/2 = -2 是向零取整,两者在负奇数时差 1。附补码演示、通用规律与 CSP-J 考点总结。
cin >> a 后接 getline 读到空串?—— 缓冲区残留...
cin >> a 混用 getline 的经典陷阱:>> 不消耗换行符,残留的 \n 使 getline 读到空串,输出 []。附缓冲区逐步演示、cin.ignore 修复方法与 CSP-J 考点总结。
cout << scientific << x 输出什么?—— 默...
cout << scientific << 123456.789 的输出是 1.234568e+05。默认精度 6,scientific 下表示 6 位有效数字并四舍五入,指数至少 2 位带符号。附 fixed/sciencefic/...