字符串
SolarDomo
每天都被头像萌醒
展开
-
HDU 3068 Manacher 模板题
题目链接题意: 求字符串的最长回文长度代码:#include <cstdio>#include <iostream>#include <vector>#include <cstring>#include <algorithm>#define sf scanf#define pf printfusing namespace std;const int maxn = 110000 * 2原创 2016-08-08 11:59:46 · 317 阅读 · 0 评论 -
后缀数组 资料
http://blog.csdn.net/jokes000/article/details/7839686原创 2016-08-08 23:49:45 · 248 阅读 · 0 评论 -
01字典树 小结
为了做13年南京网络赛的一道题 学了这个01字典树 看了别人的模板 之后切了几道水题 现在总结一下01字典树的实现可以看成是把一个数的二进制字符化后插入到一颗一般的字典树中比如在01字典树种插入3时 相当于在字典树中插入00 …..00011(一共33为,这个根据具体实现不同)查找最大异或值的时候我们是从最高位 向下贪心查找 贪心策略为:当前查找第k位 二进制数位IDX 如果存在IDX ^原创 2016-08-10 10:15:07 · 3666 阅读 · 2 评论 -
POJ 2778 DNA Sequence AC自动机 + 可达矩阵 + 矩阵快速幂
题目链接: http://poj.org/problem?id=2778代码:#include <cstdio>#include <iostream>#include <cstring>#include <queue>#define sf scanf#define pf printf//#define LOCALusing namespace std;typedef long lon原创 2016-08-13 13:19:23 · 387 阅读 · 0 评论 -
HDU 2243 考研路茫茫——单词情结 AC自动机 + 矩阵快速幂
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2243代码:#include <cstdio>#include <iostream>#include <cstring>#include <queue>#define sf scanf#define pf printf//#define LOCALusing namespace std;原创 2016-08-13 14:20:36 · 489 阅读 · 0 评论 -
HDU 4787 GRE Words Revenge 在线AC自动机
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4787构造两个自动机 当一个自动机大于节点上限,就将BUFF全部加入AC 有个问题就是TOP在1000的时候能AC 5000和500就会WA不是很懂为什么代码:#include <bits/stdc++.h>#define sf scanf#define pf printfusing names原创 2016-09-22 20:59:56 · 317 阅读 · 0 评论 -
POJ 1743 Musical Theme 后缀数组
题目链接:http://poj.org/problem?id=1743题意:求序列中最长不重叠重复字串二分答案#include <cstdio>#include <cstring>//#include <iostream>#include <algorithm>#include <vector>#define sf scanf#define pf printfusing namespa原创 2016-09-07 16:23:03 · 201 阅读 · 0 评论 -
POJ 3261 Milk Patterns 后缀数组 二分答案
题目链接:http://poj.org/problem?id=3261题意:在序列中求连续可重复至少出现了K次的最长的子串我们将height数组更加二分的答案分组,一个分组里面的后缀个数就是有某个子串出现的次数代码:#include <cstdio>#include <cstring>#include <algorithm>#include <vector>#define sf scanf原创 2016-09-07 20:23:09 · 303 阅读 · 0 评论 -
SPOJ 694 Distinct Substrings 后缀数组
题目链接:http://www.spoj.com/problems/DISUBSTR/题意:求一个字符串中有多少个不相同的字串 每一个子串都是字符串的一个后缀的前缀,这样问题就变为N个字符串有多少个不相同的前缀 按照sa[1],sa[2]….,sa[N]的顺序来考虑后缀 加入sa[i]时 一定有height[i]个前缀已经在前面被计数过 二期sa[i]的长度大于height[i]的前缀在前原创 2016-09-07 21:09:55 · 236 阅读 · 0 评论 -
SPOJ 705 New Distinct Substrings 后缀数组
题目链接:http://www.spoj.com/problems/SUBST1/和SPOJ 694 一样代码如下:#include <cstdio>#include <cstring>#define sf scanf#define pf printfusing namespace std;const int maxn = 50000 + 5;int wa[maxn],wb[maxn],w原创 2016-09-07 21:15:26 · 273 阅读 · 0 评论 -
Manacher 模板
测试题目:const int maxn = 500;int dis[maxn];char str1[maxn],str2[maxn];int get_dis(){ int len = strlen(str1); str2[0] = '$'; char* str_a = str2 + 1; for(int i = 0;i <= len;++i){ s原创 2016-09-26 18:07:35 · 272 阅读 · 0 评论 -
KMP 模板
测试题目:const int maxn = 100;char s[maxn],p[maxn];int fail[maxn];/* p为模式串** f为保存失配边的数组***/void getFail(char* p,int* f){ int m = strlen(p); f[0] = 0; f[1] = 0; for(int i = 1;i < m;++i)原创 2016-09-26 17:52:59 · 236 阅读 · 0 评论 -
字典树模板
测试题:struct Trie{ /** * maxnode: Trie树中最多可能的节点个数 上限为字符串个数 * 最长长度 * sigma_size: 组成字符串的字符种类 * ch: 边 * value: 节点的值 * sz: Trie树的总节点个数 */ int原创 2016-09-26 17:49:23 · 249 阅读 · 0 评论 -
后缀数组 倍增算法模板
int wa[maxn],wb[maxn],wv[maxn],ws[maxn];int cmp(int *r,int a,int b,int l){return r[a]==r[b]&&r[a+l]==r[b+l];}void da(int *r,int *sa,int n,int m){int i,j,p,*x=wa,*y=wb,*t;for(i=0;i<m;i++) ws[i]=0;原创 2016-08-19 10:42:08 · 862 阅读 · 1 评论 -
HDU 3695 Computer Virus on Planet Pandora AC自动机
题目连接:http://blog.csdn.net/SolarDomo/article/category/6354437题意:问模式串在主串和主串的逆串中出现多少个 建自动机之后,把正串和反串都跑一边自动机,遍历到的VALUE值的清空代码:#include <bits/stdc++.h>#define sf scanf#define pf printfusing namespace std;原创 2016-10-26 20:42:15 · 521 阅读 · 0 评论 -
后缀自动机 资料
陈立杰PPT: http://wenku.baidu.com/link?url=2CDDM8I1v6eCOwDUTn81mb56cj7rS8b0TpJ0egjb7gmUxnvO9oMRfttEsolf3rJw-lbHoUQ4c_ub2wbQB-yQQa1GU7TZxtAN5LvPfGXGej3范爷博客: http://fanhq666.blog.163.com/blog/static/81943原创 2016-11-10 10:59:16 · 361 阅读 · 0 评论 -
POJ 3764 The xor-longest Path 01字典树 邻接表
题目链接:http://poj.org/problem?id=3764题意: 求树上路径边异或和最大值思路和上一篇一样 只是这个POJ 超内存一直wa也不提示 后来把vector改成 数组模拟之后就过了代码:#include <cstdio>#include <iostream>#include <queue>#include <cstring>#define sf scanf#def原创 2016-08-10 07:14:51 · 427 阅读 · 0 评论 -
BZOJ 4206 Codechef REBXOR 01字典树
题目链接: http://www.lydsy.com/JudgeOnline/problem.php?id=4260题意: 数组中求 不相交两个区间 两个区间异或和相加最大值代码:#include <cstdio>#include <iostream>#include <queue>#include <cstring>#define sf scanf#define pf printfus原创 2016-08-10 06:29:25 · 373 阅读 · 0 评论 -
HDU 5536 Chip Factory 01字典树
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5536题意:数组中求 i,j,k 最大的(A[i] + A[j]) xor A[k] i != j != k n^2枚举i,j 同时删除字典树中的A[i] A[j] 之后询问A[i] + A[j] 的最大的A[k] 维护最大异或和代码:#include <cstdio>#include <iost原创 2016-08-10 06:09:16 · 947 阅读 · 0 评论 -
HDU 3065 AC自动机 模板题
题目链接水题不多说 没关freopen WA了一次代码如下:#include <cstdio>#include <iostream>#include <cstring>#include <queue>#include <algorithm>#include <set>#define sf scanf#define pf printfusing namespace std;cons原创 2016-08-05 18:31:38 · 301 阅读 · 0 评论 -
HDU 2896 AC自动机 模式串匹配
题目链接题意:查找主串中出现的模式串 并 输出模式串的编号 模板题#include <cstdio>#include <iostream>#include <cstring>#include <queue>#include <algorithm>#include <set>#define sf scanf#define pf printfusing namespace std;c原创 2016-08-05 17:48:27 · 553 阅读 · 0 评论 -
HDU 2222 AC自动机 入门题
题目链接代码如下:#include <cstdio>#include <iostream>#include <cstring>#include <queue>#define sf scanf#define pf printfusing namespace std;const int sigma_size = 26;struct Trie_Node{ int value;//单原创 2016-08-05 15:35:12 · 332 阅读 · 0 评论 -
POJ 3974 Manacher 模板题
题目链接题意:求最长回文子串的长度代码:#include <cstdio>#include <iostream>#include <vector>#include <cstring>#include <algorithm>#define sf scanf#define pf printfusing namespace std;const int maxn = 1000000 * 2原创 2016-08-08 12:09:30 · 334 阅读 · 0 评论 -
HDU 1671 字典树 查找前缀
题目链接题意: 若干个电话号码 是否存在某个号码是另一个号码的前缀将每一个号码都加入一颗字典树中 此时如果这个号码是某个号码的前缀或者某个号码是它的前缀 那么 第一种情况下此号码的节点在某个号码的路径上 第二种情况 在这个号码的路径上存在号码节点#include <cstdio>#include <iostream>#include <cstring>using namespace s原创 2016-08-05 13:21:16 · 347 阅读 · 0 评论 -
HDU 1251 字典树 前缀计数
题目链接加入单词时 路径上每个点得count值都加一 查询直接输出 单词节点的count值#include <cstdio>#include <cstring>#define sf scanf#define pf printfusing namespace std;struct Trie_node{ int count; struct Trie_node* next[26原创 2016-08-05 13:13:05 · 258 阅读 · 0 评论 -
HDU 1075 字典树 树搜索 逆路径输出单词
题目链接题意: 给出一个字典 和 文章 根据字典翻译文章 字典中没有的词不用翻译 标点不用翻译将字典中的所有单词都Insert进一颗字典树中 MAR单词的节点的Eng指针指向它对应的ENGLISH单词节点 所有Eng指针为NULL的不是MAR单词 找到对应的ENGLISH单词节点之后 又pre指针向上直到root 沿途将字母存入temp数组中最后将数组逆序代码:#include <cstdio>原创 2016-08-05 13:09:17 · 539 阅读 · 0 评论 -
POJ 1961 KMP
题目链接题意: 求所有可以 表示成 (S)^K的前缀 输出前缀位置 和 k的最大值代码:#include <cstdio>#include <iostream>#include <vector>#include <cstring>#include <algorithm>#define sf scanf#define pf printfusing namespace std;const原创 2016-08-08 13:09:38 · 217 阅读 · 0 评论 -
POJ 2752 KMP 待AC
题目链接求相等前后缀长度代码:#include <cstdio>#include <iostream>#include <vector>#include <cstring>#include <algorithm>#define sf scanf#define pf printfusing namespace std;const int maxn = 400000 + 50;char原创 2016-08-08 14:02:32 · 248 阅读 · 0 评论 -
HYSBZ 2342 最长双倍回文串 Manacher
题目链接题意: 双倍回文串 为:一个回文串是一个更小的回文串的两倍首先我们用Manacher将字符串扫一遍 得到dis数组 由题意这个回文串一定是4的倍数枚举这个串的中心i 和 小回文串的半径k dis[i] - 1 >= 4 * k 判断是否存在这样的小回文串 如果存在 则小回文串的中心 j = i + (4 * k + 1) / 2 如果dis[j] - 1 >= 2*k 那么存在这样原创 2016-08-08 16:16:53 · 766 阅读 · 1 评论 -
POJ 3080 Blue Jeans 字典树
题目链接题意:给N个文本串 找到在一个在N个文本串中都出现的最长的字典序最小的字串本来找的是KMP 的题 想来半天都不知道怎么用KMP搞 之后发现可以 将每个串的后缀都加入一颗字典树中 字典树中每个节点的value表示一个状态 即 这个串在哪几个序列中出现过 最后在树上深搜 按A C G T 的顺序搜索 最后在逆这树向上打印文本时间复杂度: 一个串有len个后缀 将一个长度为n的串加入原创 2016-08-08 15:08:35 · 263 阅读 · 0 评论 -
HYSBZ 2565 最长双回文串 回文树应用
题目链接题意:求一个最长的由两个回文串拼接来的字串回文树 顺序 逆序 两边扫描文本串 根据 回文树得到的当前最长后缀回文串 记录以i为结尾的在原串中的最长前缀和最长后缀回文串 维护一个max值即可回文树是贴的模板 只是有点点理解#include <stdio.h>#include <iostream>#include <string.h>#include <queue>#defin原创 2016-08-08 22:12:10 · 435 阅读 · 0 评论 -
回文自动机 资料
回文自动机 也叫 回文树 开始学习 先把网上的资料保存起来http://blog.csdn.net/lwfcgz/article/details/48739051http://blog.csdn.net/u013368721/article/details/42100363http://www.cnblogs.com/tmzbot/p/4491559.html原创 2016-08-08 21:21:14 · 539 阅读 · 0 评论 -
POJ 2406 Power Strings KMP
题目链接题意:问串S 最多能表示成多少个串的重复 输出重复的最大值代码:#include <cstdio>#include <iostream>#include <cstring>using namespace std;const int maxn = 1000000 + 5;int NEXT[maxn];char str[maxn];int main(){ while( sc原创 2016-08-08 13:11:50 · 229 阅读 · 0 评论 -
HDU 4825 Xor Sum 01字典树
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4825题意:找出集合中与X异或的最大值01字典树模板题代码:#include <cstdio>#include <iostream>#include <queue>#include <cstring>#define sf scanf#define pf printfusing namespac原创 2016-08-10 06:02:10 · 647 阅读 · 0 评论 -
HDU 4821 String 字符串HASH
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=4821代码:#include <bits/stdc++.h>using namespace std;typedef unsigned long long ULL;const int maxn = 100000 + 50;const ULL seed = 131;ULL HASH[maxn],BAS原创 2016-12-05 14:13:07 · 360 阅读 · 0 评论