随笔分类 -  笔记

摘要:求整个串和每个后缀的最长公共前缀,复杂度线性。代码如下: for(int i=2;i<=cnt;i++){ if(p+z[p]>i)z[i]=min(z[i-p+1],p+z[p]-i); while(c[z[i]+1]==c[i+z[i]])z[i]++; if(i+z[i]>p+z[p])p=i 阅读全文
posted @ 2023-03-29 21:10 Feynn 阅读(19) 评论(0) 推荐(0) 编辑
摘要:感觉就是一种技巧层面的东西。 有的时候我们希望统计一类最优型问题,而求解最优的过程中又需要通过 DP 来解决,此时就可以使用到这个叫做 DP 套 DP 的技巧。具体而言我们可以把内层的 DP 值当成状态存入外层 DP 中进行转移。而且这一类问题的内层 DP 的值的种类不会太大,否则无法当成状态存储。 阅读全文
posted @ 2023-03-16 20:52 Feynn 阅读(344) 评论(0) 推荐(1) 编辑
摘要:最基础的形式。 i=0nai+bc=f(n,a,b,c) 考虑化简。 $$ \begin{aligned} &\sum\limits_{i=0}^n\lfloor\frac{ai+b}{c}\rfloor\ =& 阅读全文
posted @ 2023-03-08 17:07 Feynn 阅读(21) 评论(0) 推荐(0) 编辑
摘要:首先是NTT的板子。 int cnt[N]; void NTT(int a[],int lim,bool type){ for(int i=0;i<(1<<lim);i++)cnt[i]=(cnt[i>>1]>>1)|((i&1)<<(lim-1)); for(int i=0;i<(1<<lim); 阅读全文
posted @ 2023-02-12 11:51 Feynn 阅读(373) 评论(0) 推荐(0) 编辑
摘要:莫反最重要的东西就是莫比乌斯函数的一个性质: μ1=εμ 是一个积性函数,所以可以通过这种方式结合数论分块解决一些问题。 P3455 等价于求 ij[gcd(i,j)=1]。可以通 阅读全文
posted @ 2023-01-13 15:18 Feynn 阅读(143) 评论(0) 推荐(0) 编辑
摘要:SAM review 板子 先复习一下 SAM 的构建过程吧。SAM 本质上是以 endpos 树为基础生成的一个 DAG。构建思路是这样的:对于一个字符串 w,先新建一个点 np,其对应的位置集合是 n,它的 len 显然应该等于当时的字符串长度(或者说是 $len(last) 阅读全文
posted @ 2022-12-09 10:05 Feynn 阅读(58) 评论(0) 推荐(0) 编辑
摘要:还是刷了一些题,总结一下吧。 枚举顺序 AT_arc108_e 用 fl,r 表示选择了 l,r 之后的期望长度。转移上枚举下一个数是谁,有方程: $$ f_{l,r}=1+\frac{1}{cnt}\sum\limits_{l<i<r,a_l\le a_i\le a_r}f_{l,i 阅读全文
posted @ 2022-12-02 14:43 Feynn 阅读(29) 评论(0) 推荐(0) 编辑
摘要:SA 后缀排序的中心思想是倍增,为了优化常数会使用一些比较特别的技巧。写法上主要分为两个部分,即预处理部分和倍增部分。首先定义几个数组,sai 是排名为 i 的数组的位置,rki 是后缀 i 的排名,pli 是第一关键字 i 的位置,id 是按第二关键字排序后的数组 阅读全文
posted @ 2022-12-01 11:16 Feynn 阅读(120) 评论(0) 推荐(0) 编辑
摘要:AC 自动机是更高维的 kmp。构造方法感觉更像是运用了 dp 的思想,先对所有模式串建立一棵 Trie 树,然后考虑某个节点 x,有个 w 的后缀,考虑如何去求它的 fail 值。于是就有了 AC 自动机的核心代码: int x=q.front(),ff=t[x].fail;q.pop() 阅读全文
posted @ 2022-12-01 11:12 Feynn 阅读(324) 评论(0) 推荐(0) 编辑
摘要:模拟赛中遇到了,被迫花了一天来学习。 轮廓线 DP 本质上是逐格转移的状压 DP,有特别经典的图可以说明: 思想上非常好理解,就是把分界处的状态压缩起来。主要是实现上有许多技巧需要说一下。第一个是状态的表示方法,在大多数情况只需要用 0/1 来代表这个位置是否存在插头即可,一般会以二进制或者四进制的 阅读全文
posted @ 2022-12-01 11:11 Feynn 阅读(934) 评论(0) 推荐(0) 编辑
摘要:更应该说是一种思想吧。 我们希望知道恰好选择 k 个物品时的答案,但世界上哪来的那么多恰好呢。令 fx 是恰好选择 k 个物品时的答案,那么点集 (x,fx) 常会形成一个凸包,于是要知道特定 x 的答案,就只需要二分出这个点的斜率,然后用截距加上横坐标乘斜率即可,这个过程就 阅读全文
posted @ 2022-12-01 11:11 Feynn 阅读(39) 评论(0) 推荐(0) 编辑
摘要:一篇比较初步的方法总结。 矩阵快速幂优化递推最经典的应用是快速求斐波那契数列的某一项,由于过于简单在这里没有什么必要提。由此引申出一类和上面一样单纯地优化递推过程的题目。经典题目如 跳房子link,用 fx 代表跳到 x 的方案数,用 Fx 表示 f 的前缀和,那么根据定义有 $ 阅读全文
posted @ 2022-12-01 11:10 Feynn 阅读(74) 评论(0) 推荐(0) 编辑
摘要:初学笔记,目前水平仅限于板子。 李超线段树可以维护很多直线(或者线段),并可以查询某个点上最高点或者最低点。思想是考虑当前线段可能会更新哪些区间,对于一个区间而言,有一个之前的最优线段和当前线段,如果当前线段更优则交换二者位置。然后用得到的次优线段去更新比最优线段优的那半个数轴,递归处理即可,复杂度 阅读全文
posted @ 2022-12-01 11:09 Feynn 阅读(46) 评论(0) 推荐(0) 编辑
摘要:又叫 SOSdp。一般而言可以使用高维前缀和来统计形如: s_x=\sum\limits_{y&x=y}a_y 的问题。代码上的形式如下: for(int i=0;i<20;++i) for(int j=0;j<n;++i) if((1<<i)&j) S[j]+=(S[j^(1<<i)]); C 阅读全文
posted @ 2022-12-01 11:09 Feynn 阅读(30) 评论(0) 推荐(0) 编辑
摘要:好久没碰数论了,感觉自己的基础挂得一塌糊涂,复习一下这玩意吧。 希望求得 ax+by=c,先同时除以 gcd 化成 ax+by=1 的形式。然后呢用欧几里得的思想,假设我们已经求得了 (b,a 的答案,即已知:x0b+y0a,也就是说: $$ x_0b+y_0(a- 阅读全文
posted @ 2022-12-01 11:08 Feynn 阅读(17) 评论(0) 推荐(0) 编辑
摘要:主要探讨切比雪夫距离和曼哈顿距离的关系。最基本的定义:有两个点记作 (x1,y1),(x2,y2),两个点的曼哈顿距离是 |x1x2|+|y1y2|,切比雪夫距离是 max(|x1x2|,|y1y2|)。二者有密切联系,有图: 这张图说得非常精辟。蓝点对 阅读全文
posted @ 2022-12-01 11:08 Feynn 阅读(64) 评论(0) 推荐(0) 编辑
摘要:有标号无根树和 prufer 序列形成双射的关系。所以有一些性质。 其构造方式是拿一棵树出来,它有许多叶子。找出这些叶子中编号最小id,记录下它的父亲,丢掉。重复这一过程,会得到一个长度为 m2 的序列,即 prufer 序列。用堆可以做到单 log,当然也有线性做法(如果它丧心病狂想卡的话) 阅读全文
posted @ 2022-12-01 11:04 Feynn 阅读(39) 评论(0) 推荐(0) 编辑
摘要:两个知识点。 首先是最小树形图,意思是有一张带权有向图,钦定一个点,希望保留一些边使得这个点可以到达所有点,最小化边权和。思路上就是说贪心地选择每个点权最小的入边并加入集合中,这样形成的图兴许是最优的(和某B开头的最小生成树算法异曲同工)。但是有可能会出现环,此时就需要缩点,然后一直做下去即可。就这 阅读全文
posted @ 2022-12-01 11:02 Feynn 阅读(116) 评论(0) 推荐(0) 编辑
摘要:非常幼稚和不严谨的学习笔记。 前置 板板 const double eps=1e-8; struct node{ double x,y;node(double xx=0,double yy=0){x=xx,y=yy;} inline void in(){scanf("%lf%lf",&x,&y);} 阅读全文
posted @ 2022-11-30 14:15 Feynn 阅读(70) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示