板子
zjj1128
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
后缀数组(学习心得)
后缀数组后缀数组是一种处理字符串的利器,很多字符串的问题都可以通过后缀数组来实现。后缀数组说简单一点就是对一个字符串的所有后缀子串进行排序。我来举个例子,比如字符串banana刚开始的时候它的后缀子串是anaanananaananabanana就是从主串的每个点i到结尾形成的这些子串。后缀数组就是把这些子串按字典序来排个序。aanaananabananananana具体的排序过程看起来非常痛苦,其实我们并不需要掌握是怎么排序的,我们只需要理解排序以后的数组就可以了,具体原创 2021-09-06 09:20:49 · 334 阅读 · 0 评论 -
扩展KMP模板
扩展KMP扩展KMP是一种解决字符串的数据结构,我们假设母串为S,长度为n,子串为T,长度为m,让我们求出所有S的后缀子串与T的最长公共前缀,也就是求出S(i,n)与T(1,m)的最长公共前缀,定义成一个数组就是extend[i]extend[i]extend[i]扩展KMP就是求这个extend[i].具体extend的求法就不具体写了,这里只写求extend的模板.模板用到的数组char T[N]; //子串char S[N]; //母串int next[N];//辅助数组nextin原创 2021-09-04 11:57:56 · 187 阅读 · 0 评论 -
FFT(板子)
FFTFFT其实就是求两个多项式的乘积的一个算法,里面具体的证明和思路我还不太懂,只是会用模板。多项式的存储struct Complex{ double x, y; Complex operator+ (const Complex& t) const //复数的运算 { return {x + t.x, y + t.y}; } Complex operator- (const Complex& t) const {原创 2021-08-08 18:32:13 · 331 阅读 · 0 评论 -
AtCoder Beginner Contest 212-D.Querying Multiset(逆向思维)
题意有三种操作。1.向队列中加一个数x。2.给队列中所有的数都加上x。3.输出队列中最小的数并且从队列中移除。思路我们知道第一种操作和第三种操作用优先队列很好实现,但是第二种操作如果暴力的话是会超时的,我们应该用逆向思维,题目中说的是把队列中的数都加上x,我们可以把后面没有加进来的数都减去x,我们记录一个sum,表示当前队列中的数加的数,当遇到1操作的时候,我们就对这个x-sum,如果遇到操作2,我们就对sum+x,这样就可以o(1)的处理了。代码#include <bits/stdc原创 2021-08-06 20:13:59 · 277 阅读 · 2 评论 -
字符串hash
字符串hash以前从来没有真正意义的用到过,所以就一直没有了解过,今天突然遇到一个小东西,但是不知道怎么解决。小问题是这样的:给你一个字符串,给你两个区间,让你判断两个区间内的值是否相等。我当时看到这个直接想的就是直接比较呀。但是看了字符串是1e61e61e6的,有1e51e51e5次查询,如果直接进行比较的话时间复杂度是会超时的。我们肯定需要o(1)的时间来比较两个字符串是否相等,这就需要用到字符串hash了。模板用到的数据const int base=131;//此处p取131 ull原创 2021-07-19 11:00:52 · 146 阅读 · 0 评论 -
并查集(板子)
并查集初始化 int p[N]; //存储每个点的祖宗节点 for (int i = 1; i <= n; i ++ ) p[i] = i;find函数// 返回x的祖宗节点int find(int x){ if (p[x] != x) p[x] = find(p[x]); return p[x];}合并两个集合 //合并a和b所在的两个集合: p[find(a)] = find(b);...原创 2021-07-16 16:57:44 · 305 阅读 · 0 评论 -
序列自动机(板子)
序列自动机序列自动机:nex[i][j]nex[i][j]nex[i][j]数组,j的范围为(0~25)即对应26个英文字母。表示原串s的第i位后面那26个字母j出现的最早的位置也就是next指向的是下一个j的坐标,这样的话把next的值带入下一个next[i][j]中的j,就可以一直向下找。nex[i][j]nex[i][j]nex[i][j]数组的初始化int nex[N][26];void init(){ memset(nex,-1,sizeof nex); for(in原创 2021-07-16 11:35:00 · 119 阅读 · 0 评论 -
数位DP模板+裸体
题意嘟嘟讨厌38和4,给你一个区间,让你找到区间中所有让人讨厌的数字。记忆化的数位DP代码#include <bits/stdc++.h>#define ll long long#define fi first#define se second#define pb push_back#define me memsetconst int N = 1e5+10;const int MOD = 1e9+7;const int INF = 0x3f3f3f3f;using na原创 2021-07-14 18:51:57 · 134 阅读 · 0 评论 -
st表维护区间最大公约数(板子)
st表维护区间最大公约数int a[N],Log[N],f[N][30];int n,gc;void Getlog()//log预处理{ Log[0]=-1; for(int i=1;i<=2*n;i++) Log[i]=Log[i>>1]+1;}void RMQ()//st表预处理{ for(int j=1;j<=Log[2*n];j++) for(int i=1;i+(1<<j)-1<=2*n原创 2021-07-11 19:46:19 · 440 阅读 · 0 评论
分享