
字符串
巴扎嘿呀
学习知识图谱中~欢迎交流
展开
-
康托编码(模板)
//O(n)求1~n全排列字典序第k小,例如n=3,则123为k=1,132为k=2 void init(){ //预处理阶乘 fac[0]=1; for(int i=1;i<=17;i++){ fac[i]=fac[i-1]*i; }}vector<int> Kthpermutation(int n,ll k){ //一种全排列,例如n=6,则k=t1*5!+t2*4!+t3*3!+t4*2!+t5*1!+t6*0!+1 //ti=比第i位上的数字小且没有在小于.原创 2020-11-04 08:51:27 · 203 阅读 · 0 评论 -
字符串哈希(模板)
//将字符串看成P进制数,P的经验值是131或13331,取这两个值的冲突概率低//取模的数用2^64,这样直接用unsigned long long存储,溢出的结果就是取模的结果typedef unsigned long long ull;ull h[N], p[N]; // h[k]存储字符串前k个字母的哈希值, p[k]存储 P^k mod 2^64// 初始化p[0]=1;for(int i=1;i<=n;i++){ h[i]=h[i-1]*P+str[i]; .原创 2020-09-29 18:01:55 · 560 阅读 · 0 评论 -
KMP(模板)
//s[]是长文本,p[]是模式串,n是s的长度,m是p的长度//下标都从1开始 //求模式串的Next数组:ne[i]:p[1~i]前缀和后缀最大匹配长度 for(int i=2,j=0;i<=m;i++){ while(j&&p[i]!=p[j+1]) j=ne[j]; if(p[i]==p[j+1]) j++; ne[i]=j;}// 匹配for(int i=1,j=0;i<=n;i++){ while(j&&am.原创 2020-09-27 20:49:46 · 103 阅读 · 0 评论