摘要: 虽然没什么特别需要说的,但还是建了这么个东西。 文章都可以在分类和标签中找到!实在找不到还可以站内搜索。 lougu Link 阅读全文
posted @ 2022-02-24 11:59 cbdsopa 阅读(65) 评论(0) 推荐(0) 编辑
摘要: 简单的东西就简单说说把,实际上就是一棵树,每条边上有一个字符,然后一个点代表的字符就是根到达它的路径上的字符按遍历顺序组成的字符串。 #include<bits/stdc++.h> using namespace std; int n,m; int edge[500010][26],tot; int 阅读全文
posted @ 2022-02-24 11:53 cbdsopa 阅读(61) 评论(0) 推荐(0) 编辑
摘要: 思想:把字符串变成数值比较。 我们选取这个 hash 公式: \[hash(s)=\sum_{i=1}^{len} s_i\times p^{len-i}(mod\ M) \]hash方法 自然溢出hash 我们使用 unsigned long long hash[N]; (\(hash[k]\)) 阅读全文
posted @ 2022-02-24 11:52 cbdsopa 阅读(59) 评论(0) 推荐(0) 编辑
摘要: 手动模拟出奇迹 #include<bits/stdc++.h> using namespace std; inline int read(){ int s=0,f=1; char ch=getchar(); while(ch<'0'||'9'<ch) {if(ch=='-') f=-1;ch=get 阅读全文
posted @ 2022-02-24 11:52 cbdsopa 阅读(27) 评论(0) 推荐(0) 编辑
摘要: AC自动机 其实是trie树的改图。每次状态转移在末尾增添一个字符。 其使用失配指针 \(fail\) 指向自动机中自己的最长后缀,以达到多模匹配的效果。 模板题 代码: 其实也不多说了,就是trie加一个fail指针。 其中fail指针如何求?我们遍历全图,当遍历到一条链的第二个点时,我们在初始状 阅读全文
posted @ 2022-02-24 11:51 cbdsopa 阅读(21) 评论(0) 推荐(0) 编辑
摘要: 简单说一下,首先我们类似扩展KMP一样的维护右端点最右的区间。我们直接把当前的点放到这个最右区间内翻转,直接用这个翻转的位置更新回文长度,然后由于不能保证区间外的回文性,于是取个min,具体看代码。 然后为了统一处理奇偶回文,我们在字符直接以及字符串开头结尾添加 # ,代表空。那么对于一个偶数 \( 阅读全文
posted @ 2022-02-24 11:50 cbdsopa 阅读(91) 评论(0) 推荐(0) 编辑
摘要: 由于算法基于随机,不适宜作为题目正解,但在参数调得好的时候可以得到较高分数甚至AC,用于实在迫于无奈时的算法或暴力算法范围外的骗分算法 典型的邪教算法(我就喜欢邪教的) 基本思想是随机转移,从而确定最优解,大多数用于计算几何(但其实你如果够牛也可以在其他情况下用来骗分) 基本的实现步骤是: 1.取一 阅读全文
posted @ 2022-02-24 11:49 cbdsopa 阅读(42) 评论(0) 推荐(0) 编辑
摘要: 做了相当一部分的退火题练手,现在才算刚刚入了门。 于是做一个经验总结。 随机函数 有没有觉得 \(rand()\) 莫名的不好用?我们在此为您推荐 \(mt19937!\) 在支持 \(c++14\) 的环境下,可以生成更大的随机数,而且更快,岂不美哉? 实用展示 mt19937 rd_ori(ti 阅读全文
posted @ 2022-02-24 11:49 cbdsopa 阅读(92) 评论(0) 推荐(0) 编辑
摘要: 随便提几笔吧,时间不太充裕就不写太多了。 就是在区间的基础上再加上一个时间。 来个例题 数颜色|维护队列 直接就是考虑按照 \(l\) 所在块, \(r\) 所在块, \(t\) 的优先级排序,然后可以证明在块长取 \(n^{\frac{2}{3}}\) 时最优,可用最劣情况证明其复杂度。 然后就是 阅读全文
posted @ 2022-02-24 11:48 cbdsopa 阅读(28) 评论(0) 推荐(0) 编辑
摘要: 引入 如果你已知一个序列,你已知其 \([2,6]\) 的区间和以及原序列,现在要你求$[2,7]$的区间和,你会怎么办? 显然我们可以在 \([2,6]\) 的基础上加上原序列的第 7 位,就得到了 \([2,7]\) 的区间和。 同理,如果我们需要求出 \([2,5]\) 的区间和,我们只需要在 阅读全文
posted @ 2022-02-24 11:47 cbdsopa 阅读(52) 评论(0) 推荐(0) 编辑
摘要: 思想就是分治! 然后就是每次二分区间,然后在分治统计左右区间之后,考虑统计跨越左右区间的数对。 给个模板题 陌上花开。 我们对于这个三维偏序问题,可以考虑CDQ分治。 先对于原序列按照a,b,c排序,这样保证a的单调增。 然后分治,对于每个小区间按照b,a,c排序,这样在右边区间的a大于左边区间的前 阅读全文
posted @ 2022-02-24 11:46 cbdsopa 阅读(33) 评论(0) 推荐(0) 编辑
摘要: 概念 中缀表达式 就是我们平时用的式子。 前缀表达式 也叫波兰式,除了处理顺序与后缀表达式相反(从右往左),其他完全一致。 后缀表达式 也叫逆波兰式,从左往右处理,如果扫到数字,就把数字入栈;如果是字符,那么从栈顶取出两个数字进行运算,在将计算结果入栈。最后栈中的元素为结果。 表达式转换 前、后缀转 阅读全文
posted @ 2022-02-24 11:44 cbdsopa 阅读(46) 评论(0) 推荐(0) 编辑
摘要: 发现以前都没有真的理解二分边界应该取多少。所以手写lower_bound出了一些锅,于是用了3种不同方式拍了几组数据改了下错,才真正理解了。 先上对拍程序(windows) \(mian.cpp\) #include<bits/stdc++.h> #include<windows.h> using 阅读全文
posted @ 2022-02-24 11:41 cbdsopa 阅读(30) 评论(0) 推荐(0) 编辑
摘要: 对拍模板,很好理解,就不多讲了。 #include<bits/stdc++.h> using namespace std; int main(){ while(1){ system("data.exe > data.in"); int t=clock(); system("hard.exe < da 阅读全文
posted @ 2022-02-24 11:39 cbdsopa 阅读(40) 评论(0) 推荐(0) 编辑
摘要: 我当时知道ST表可以 \(O(1)\) 求 LCA 的时候是极为震惊的,可以在需要反复使用 LCA 的时候卡常使用。 ST表!用于解决 RMQ问题 ST表 我可能写得不好,看专业的 怎么实现? 考虑把求 LCA 转换为 RMQ问题。我们对于树求一遍欧拉序,就是那个回溯也会记录的那个。我们处理出每个数 阅读全文
posted @ 2022-02-24 11:37 cbdsopa 阅读(50) 评论(0) 推荐(0) 编辑
摘要: 预处理复杂度$O(n\ log\ n)$,查询复杂度$O(log\ n)$。 主要思想是倍增,通过预处理出夫亲的倍增数组实现快速求LCA 1 的父节点取 0 是为了方便树上差分,1 的深度设置得比 0 大是为了防止在求LCA时跳到0. 挺好理解的。 #include<bits/stdc++.h> u 阅读全文
posted @ 2022-02-24 11:36 cbdsopa 阅读(40) 评论(0) 推荐(0) 编辑
摘要: 在用树剖解决问题时发现,每次跳链的时候,就有跳到两点LCA的可能。 所以还是有之前树剖的思想,其实和倍增的LCA很像。 优点:常数小,实现很好理解也很好写。预处理复杂度$O(n)$,查询$O(log\ n)$,附带常数小。 感觉比倍增好写,而且还快。 实现如下:(预处理点这里) inline voi 阅读全文
posted @ 2022-02-24 11:36 cbdsopa 阅读(25) 评论(0) 推荐(0) 编辑
摘要: #include<bits/stdc++.h> using namespace std; #define N 2010 #define M 200010 #define INF 0x3f3f3f3f inline int read() { int s=0,f=1; char ch=getchar() 阅读全文
posted @ 2022-02-24 11:35 cbdsopa 阅读(134) 评论(0) 推荐(0) 编辑
摘要: 不是费用流都需要用 SPFA 吗。 众所周知,SPFA 去世了,然后网络流显然有负边。于是我们可以像 Johnson 全源最短路一样,给边加上势能,具体实现看我之前的 博客 啦。 然后对于每一次跑 Dijkstra ,然后得到最短路,把势能要再加上这个最短路,可以证明这样操作一次图上不会再有负边。 阅读全文
posted @ 2022-02-24 11:34 cbdsopa 阅读(54) 评论(0) 推荐(0) 编辑
摘要: 最大流 #include<bits/stdc++.h> using namespace std; #define N 210 #define M 5010 #define INF 0x3f3f3f3f int n,m,S,T; vector<int>head,to,nxt,val; void joi 阅读全文
posted @ 2022-02-24 11:33 cbdsopa 阅读(64) 评论(0) 推荐(0) 编辑