随笔分类 - ICPC-模板
摘要:后缀自动机能解决很多单串的问题、但是一旦到了多串的情况、可能就会变得有些棘手 这个时候你可能会想能不能将多个串一起构建出和单串后缀自动机那样子拥有诸多优美性质的自动机呢? 答案当然是有的、那就是广义后缀自动机 对于广义后缀自动机、和普通的后缀自动机写法上有些许不同之处 大致就是在插入新串的时候、需要
阅读全文
摘要:参考博客 I、参考博客 II 学习参考 hihocoder struct SAM { static const int MAXN = ((int)1e6 + 10)<<1;///大小为字符串长度两倍 static const int LetterSize = 26;///字符集大小 int tot;
阅读全文
摘要:BM求线性递推是最近了解到的一个黑科技 如果一个数列、其能够通过线性递推而来 例如使用矩阵快速幂优化的 DP 大概都可以丢进去 则使用 BM 即可得到任意 N 项的数列元素 参考博客 : 暂时没有、 找到了一个、希望你能看懂吧、click here 以下是 2018 焦作网络赛 L 题 AC 代码、
阅读全文
摘要:上下界网络流问题对于每一条边、都有流量上下限的限制 而普通的网络流就只有上限限制 下面分别给出几种经典上下界网络流问题的模板 参考博文Ⅰ、参考博文Ⅱ 1、无源汇的上下界可行流 实际也就是能否找出一个循环流、使得每个点的流入总流量 == 流出总流量 对于原图的每一条边在网络流中容量应当为 (上界 -
阅读全文
摘要:const int maxn = 400000; const int N = 26 ; struct Palindromic_Tree { int next[maxn][N] ;//next指针,next指针和字典树类似,指向的串为当前串两端加上同一个字符构成 int fail[maxn] ;//f
阅读全文
摘要:参考博客 struct L_B { LL d[65], p[65]; int cnt; void init() { memset(d, 0, sizeof(d)); memset(p, 0, sizeof(p)); cnt = 0; } // 1e18以内的数都适用. bool Insert(LL
阅读全文
摘要:Tarjan 求强连通分量模板、参考博客 #include<stdio.h> #include<stack> #include<algorithm> using namespace std; const int maxn = 1e3 + 10; const int maxm = 330000 + 1
阅读全文
摘要:给出几个链接 斯特林数的简单介绍 下降阶乘幂的概念 总结性博客 自然数幂和与斯特林数
阅读全文
摘要:FWT 是求多项式位元算卷积的一种高效方法 最常见的有 or、and、xor 这三种操作 void FWT(LL f[], int n, int op) { int mx = 0; while((1LL<<mx) < n) mx++; for (int i = 1; i <= mx; ++i) {
阅读全文
摘要:FFT 实际是 DFT 的一种快速实现方法 可以将多项式的乘法从 O(n^2) 优化到 O(nlogn) 暂时没有看到很好的科普文章、原理自行百度吧 #define L(x) (1 << (x)) const double PI = acos(-1.0); const int maxn = (1<<
阅读全文
摘要:卡特兰数参考链接 ( 里面有关于其在一些题目的应用 ) 1、前三十项卡特兰数表 [1,1,2,5,14,42,132,429,1430,4862,16796,58786, 208012,742900,2674440,9694845,35357670,129644790, 477638700,1767
阅读全文
摘要:参考链接 C(n, m) 代表 从 n 个物品中取 m 个的方案数 1、n ≤ 1e3 、m ≤ 1e3 利用组合递推公式打表就行了 const int C_maxn = 1e3 + 10; LL Comb[maxn][maxn]; inline void Comb_init() { for(int
阅读全文
摘要:主席树是一种可持久化线段树、其发明者orz 黄嘉泰 拼音缩写与某届主席一样、于是这个数据结构被戏称为主席树。 所谓的“持久化数据结构”、就是保存这个数据结构的所有历史版本、同时利用它们之间的共用数据减少时间和空间的消耗。 由于线段树在区间长度固定的情况下结构都是一致的、主席树能够通过两颗线段树相减来
阅读全文
摘要:关于数位DP的学习推荐 ==> Click here #define LL long long LL int a[32]; LL dp[32][state]; /*不同题目状态不同*/ LL dfs(int pos, int state /*state变量*/ ,bool lead /*前导零*/
阅读全文
摘要:如果你了解过 01 Trie 和 可持久化线段树(例如 : 主席树 )、那么就比较好去可持久化 Trie 可持久化 Trie 当 01 Trie 用的时候能很方便解决一些原本 01 Trie 不能解决的一些问题 01 Trie 的经典贪心算法可以在一个数集里面找出某个数和 X 异或的最值 但若数集不
阅读全文
摘要:#include <bits/stdc++.h> using namespace std; class DividedByZeroException {}; class BigInteger { private: vector<char> digits; bool sign; // true for
阅读全文
摘要:莫队算法是由清华大学神牛莫涛发明的一种处理区间问题的离线算法 算法核心是通过先将问询区间总长度平方分块、然后将所有的问询区间按照左端点所在的块编号排序、在同一块内的则按右端点升序 然后设置左右两个下标指针、每次都移动两个指针指向问询块的左右端点、在移动的过程中不断维护答案。 可以证明原本只通过两个下
阅读全文
摘要:LCA 有几种经典的求取方法、这里只给出模板,至于原理我完全不懂。 1、RMQ转LCA、复杂度O(n+nlog2n+m) 大致就是 DFS求出欧拉序 => 对欧拉序做ST表 => LCA(u, v) 即为 u、v 最先出现在欧拉序中的编号之间的最小值。 因为 LCA 的子树中必定有一个节点是 u,一
阅读全文
摘要:LL inv[maxn];inline void inv_init(){ inv[0] = inv[1] = 1; for(int i=2; i<maxn; i++) inv[i] = (LL)(mod - mod / i) * inv[mod % i] % mod;}
阅读全文
摘要:CDQ分治是种离线的分治算法 通常解决带有修改和问询且不强制在线的一类问题 本人菜鸡,就只能推推文章这样子 ==> CDQ分治 说一些点 ① CDQ的优点就是能起到降维的作用,从而顶替了本应多套一层数据结构才能维护的信息 具体点来说就是“消除了某一维”的影响、例如在解决三维偏序的过程中,先根据a、b
阅读全文