算法
文章平均质量分 81
yans67
我只是一个穷书生
展开
-
简单前缀树
以hdu1251统计难题为例 #include #include #include typedef struct node { int n; node *next[26]; }*trid; struct node * tree ; void build(char *ch) { int len=strlen(ch); int i,j; if(len==0原创 2013-08-16 17:08:49 · 321 阅读 · 0 评论 -
hdu1166--简单线段树
线段树是一种数据结构,在查找删除等操作时能节省很多时间,大约为log(n)。但值得注意的是,在建树时所花费的时间比较多,远大于log(n); 做了几道简单的线段树的题目,现在以hdu的1166敌兵布阵为例: 题意:给出一个整型数组a[ ],两种操作: 1.增加(Add)或减少(Sub) a[ i ] 的值; 2.(Query)计算a[ i ] 到 a[ i+k ] 的值(累加和),并输出;原创 2013-08-01 22:56:14 · 344 阅读 · 0 评论 -
静态分布内存存储trie树
以POJ3630,HDU167为例, 若用动态分布内存,在HDU就能过,Time为312ms,Memory为3712k 但在POJ为TLE 若用静态分布内存,在POJ 上的Time为141ms,Memory为2876k 在HDU上Time为62ms,Memory为2720k 静态内存代码如下: /**** poj 3630 Memory:2876k Time:141M原创 2013-08-19 20:00:32 · 363 阅读 · 0 评论 -
KMP算法
KMP算法:能在o(m+n)时间内匹配出连续相同的字符串 构造主要分成两个:1.模式串的预处理 2.文本串的朴素匹配 以ZQUOJ1317为例,主要看代码 #include #include char t[100],p[100],f[100]; void getfail(char *p,char *f) { int m=strlen(p); f[0]=0;f[1]=0; for(i原创 2013-08-16 14:47:01 · 271 阅读 · 0 评论 -
HDU1698线段树区间更新
lazy思想: 每次更新只要更新到题目要求的区间即可,然后更新此区间节点data值, 记录tree[num].lazy(等于题目要求更新的值wei), 下次要用到的时候就传递给左右子树,更新左右子树的data值。 并且将当前lazy归0.原创 2013-08-08 22:09:31 · 306 阅读 · 0 评论 -
manacher求最大回文长度
manacher能求出最大回文长度,并且时间复杂度为o(logn)。 实现该算法主要步骤: 1.构造p[ i ]值,记录每个字符回文数。 2.由于平时求回文得考虑奇偶情况,所以在字符间插入符号#(或其他没出现在字符串里的),这样就能将两种情况都转化成奇数的情况。(经典) # a # b # a # b # a # b # c # a # b # d P[i]:原创 2013-08-03 00:22:49 · 423 阅读 · 0 评论