字符串
文章平均质量分 52
Arlia
老年人记性不好
展开
-
BKDR Hash
int BKDR(char s[20]){ int seed=131; int Hash=0,i=0,Len=strlen(s); while(i<Len)Hash=Hash*seed+str[i++]; return (Hash%Max);//保证Hash值在[0,Max)之间}原创 2018-05-17 13:53:02 · 282 阅读 · 0 评论 -
AC自动机
AC自动机注意:Root不要设为0号点(我也不知道为什么,反正过不了样例,大概是我的写法不能将0号点作为根)#include<cstdio>#include<cstring>#include<iostream>#include<queue>using namespace std;char Mode[1000010];int tot,...原创 2018-05-14 19:23:21 · 113 阅读 · 0 评论 -
马拉车
马拉车找回文串的算法void Mana(int n){ Init(n); int len=n*2+1; int Ans=0,Ansp=0,p=0,pos=0; for(int i=1;i<=len;i++){ if(i<pos)R[i]=min(R[p*2-i],pos-i+1); else R[i]=1; ...原创 2018-05-14 19:30:38 · 397 阅读 · 0 评论 -
最小表示法
最小表示法把一个字符串连成一圈,这一圈字符串中字典序最小的那一个就是该字符串的最小表示法。如BCDA的最小表示法就是ABCD。int Get(){ int i,j; for(i=0,j=1;i&amp;lt;l &amp;amp;&amp;amp; j&amp;lt;l;){ int k; for(k=0;k&amp;lt;l;k++) if原创 2018-05-14 19:38:34 · 190 阅读 · 0 评论 -
KMP
KMP注意:Fail[1]=0(代码中的字符数组下标从1开始)Fail数组有两个性质:①有关循环节:对于一个长度为Len的字符串,它的循环节长度是Len-Fail[Len](数组下标从1开始);如果Len%(Len-Fail[Len])!=0,就没有循环节。②有关树:如果把所有的Fail值连上边,那么所构成的图是一棵树。bool KMP(int s,int e,int id...原创 2018-05-14 19:45:23 · 171 阅读 · 0 评论 -
Trie
Trievoid Ins(char s[12]){ int p=0,len=strlen(s); for(int i=0;i<len;i++){ int c=s[i]-'a'; if(!trie[p].son[c])trie[p].son[c]=++tot; p=trie[p].son[c]; } if(...原创 2018-05-14 19:48:10 · 136 阅读 · 0 评论 -
康托展开
来自newuser的链接:康托展开+逆康托展开原创 2018-05-16 19:44:15 · 164 阅读 · 0 评论 -
BZOJ3670 [NOI2014]动物园 [KMP]
BZOJ3670 [NOI2014]动物园 [KMP]题目描述题目传送门题解这道题主要利用了Fail数组(本题中的next数组)的性质。 熊猫:“对于字符串S的前i个字符构成的子串,既是它的后缀又是它的前缀的字符串中(它本身除外),最长的长度记作next[i]。” 设num[i]num[i]num[i]表示字符串的前iii位中前缀和后缀相等的字符串个数(没有“...原创 2018-08-01 20:37:23 · 220 阅读 · 0 评论