《ACM全面模板》是一本涵盖算法竞赛核心知识点的PDF文档,提供了大量编程问题的标准解决方案和代码模板,适合于ACM参赛者及计算机专业学生学习参考。
根据内容的大小可以看出该资料非常全面。目录如下:
数据结构:
1. RMQ(区间最值、求最大出现次数及区间gcd)
2. 二维RMQ(求二维区间的极值)
3. 线段树模板(包括区间加法,线段树染色以及查询最小值)
4. 线性基 (用于计算异或第k大)
5. 主席树(静态求区间第k小)、区间中小于k的数量和小于k的总和、区间中第一个大于等于k的值
6. 权值线段树(求逆序对)
7. 动态主席树 (结合了主席树与树状数组,用于查询带修改操作下的区间第k大)
8. 树上启发式合并(优化子树查询效率)
9. 树状数组模板(可用于计算区间异或和及逆序对数量)及扩展
10. 区间不重复数字的求和 (使用树状数组实现)
11. K维空间中离给定点最近m个点排序输出(KD树)
12. LCA(两个节点公共父节点查询)
动态规划:
1. LIS(最长上升子序列)
2. 有依赖关系的背包问题
3. 最长公共子序列 (LCS)
4. 树形DP
5. 状态压缩DP-斯坦纳树
6. 背包问题
7. dp[i]=min(dp[i+1]…dp[i+k]), multiset
博弈论:
1. NIM 博弈(多个堆,每次最少取一个)
2. 威佐夫博弈 (两个堆,每次至少拿一个或同时从两堆中取出相同数量)
3. 约瑟夫环
4. 斐波那契博弈 (玩家能取的数依赖于对手上次所取的数量)
5. SG函数
数论:
1. 数学基础:素性测试(普通方法、线性筛法及二次筛选等)
2. 拉格朗日乘子法 (求解带约束条件极值)
3. 裂项(多项式分子分母拆分技巧)
4. 扩展欧几里得算法(ax+by=c)
5. 勾股数(直角三角形三边长度)
6. 斯特林公式(n越大越准确,用于计算n!)
7. 牛顿迭代法 (求解一元多项式方程的近似根)
8. 同余定理
9. 线性逆元求取(1~p mod p 的所有逆数)
10. 中国剩余定理(n个同余方程x≡a(mod m))
11. 二次剩余((ax+k)^2 ≡ n (mod p))
12. 十进制矩阵快速幂(适用于n非常大的情况)
13. 欧拉函数
14. 费马小定理
15. 二阶常系数递推关系求解方法(a_n=p*a_(n-1)+q*a_(n-2))
16. 多项式除法
图论:
包括但不限于最短路径算法、生成树问题等。
字符串处理:
涉及字典树(Trie)、KMP搜索算法及其变种EXKMP,马拉车最长回文子串查找方法,后缀数组,AC自动机等多个经典技术。
此外还有一些小技巧和实用工具介绍,如不同语言数据类型转换、输入输出优化等。
该资料共173页。