字符串
bllsll
巴拉拉,起飞。
展开
-
最小表示法
http://www.tuicool.com/articles/bmERbm 这个讲的还行How many HDU - 2609 题意:给你很多个字符串,然后他们可以旋转成为相同的字符串,就是同一个字符串,问有多少个不同的字符串分析:我们要把这些字符串都变成相同的一种,这样,我们就可以直接知道有多个不同的字符串了。 最小表示法,将一个字符串旋转成为字典序最小的字符串这个题就是把每个字符串都用原创 2017-08-04 01:40:56 · 274 阅读 · 0 评论 -
01字典树
Xor Sum HDU - 4825题意:一个集合,集合中包含了N个正整数,随后 发起M次询问,每次询问中包含一个正整数 S ,之后 Zeus 需要在集合当中找出一个正整数 K ,使得 K 与 S 的异或结果最大。分析:用01字典树,这是一颗二叉树,只有01。我们用静态数组来建树。对于每次询问,我们先得到一个值temp(temp和k的异或最大),然后在字典树中去查找这个数,如果当前点不存在,就往反原创 2017-07-25 11:40:40 · 448 阅读 · 0 评论 -
后缀数组 Milk Patterns POJ - 3261
求k个相同的最大长度(可重叠 先是WA,因为我就是把height数组从1开始扫了一遍,看是否大于或等于mid,如果是的话,就num++;这样的话,就不一定是同一个子串了,也就是说,我前几个最大前缀满足mid ,然后下一个不满足,然后下下个height【i】>=mid,这个时候就不是和前面同一个子串 了。所以是连续的height值。 然后改过了之后TLE。因为如果height[i]>=mid, 然原创 2017-06-11 19:27:44 · 273 阅读 · 0 评论 -
后缀数组板子
来自http://blog.csdn.net/griffin_0/article/details/53054903#include<bits/stdc++.h>#include<string>using namespace std;const int maxn =2e5+10;struct Suffix{ int r[maxn]; int sa[maxn],rank[ma原创 2017-06-05 17:32:17 · 380 阅读 · 0 评论 -
HDU 3068 Manacher 算法 求最大回文
这篇博客写的不错,时间复杂度为o(n) https://www.felix021.com/blog/read.php?2040#include <iostream>#include <algorithm>#include <cstring>#include <cmath>#include <cstdio>using namespace std;const int maxn = 22000原创 2017-06-07 14:16:38 · 251 阅读 · 0 评论 -
KMP小结
KMP中最重要的就是Next数组。Next[i]:前i个字符所组成的字符串中的最大前后缀匹配长度弄清楚之后就可与做题了Seek the Name, Seek the Fame POJ - 2752 这个题意真的是难懂。还以为有多少子串可以顺着读和反着读是一样的,这样是不是很难。。 其实就是求前缀中后缀等于前缀的,用Next数组从后往前怼一下就行了Count the string HDU - 33原创 2017-08-23 08:49:15 · 212 阅读 · 0 评论 -
Ball Blasting Game UVA - 12378 (马拉车)
题意:给一个字符串,然后可以选择一个字符消除,消除的位置两边会合并起来,当合并起来的相同字符大于等于二,则可以将相同字符消除,消除的位置两边可以继续合并,直到不能合并为止。问选择一个字符消除,最多可以消除几次分析:先将相邻相同的写成一个字符,然后用马拉车求出最长回文串长度P,ans=(P+1)/2;#include <iostream>#include <algorithm>#include <原创 2017-09-19 20:21:14 · 347 阅读 · 0 评论 -
AC自动机板子(指针,数组)
输入一些子串 输入母串,看母串中有多少个子串。#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>#include <cmath>using namespace std;const int maxn = 1000000+10;const int n = 26;char y[maxn];i原创 2017-06-06 16:26:57 · 516 阅读 · 0 评论 -
AC自动机+矩阵快速幂
POJ 2778 DNA序列题意:给n条病毒DNA序列,然后问所有长度为L的DNA序列中,不包含病毒的序列有多少条。分析:首先将病毒的DNA序列建AC自动机,然后建fail指针。将每个点编号作为状态,然后可以得每个点走一步后的状态,然后长度为L,相当于走了L步,矩阵快速幂即可。举个栗子 比如病毒是{AC,C} 图好难画啊,边就不连了。。 从0点,到0的方式有2个(G,T),到1的方式有1个(A原创 2017-10-31 01:26:47 · 638 阅读 · 0 评论 -
后缀数组
本文来自 后缀数组——处理字符串的有力工具 作者:罗穗骞 2009年1月 的部分节选 例1:最长公共前缀 给定一个字符串,询问某两个后缀的最长公共前缀。 算法分析: 按照上面所说的做法,求两个后缀的最长公共前缀可以转化为求某个区间上的最小值。对于这个RMQ问题(如果对RMQ(Range Minimum Query)问题不熟悉,请阅读其他相关资料),可以用O(nlogn转载 2017-06-11 09:29:27 · 243 阅读 · 0 评论 -
后缀数组 poj. 1743. Musial Theme
题意感觉有点难懂。但就是问你,给你一个数字串,然后问有没有相同子串(不能重合且长度大于五),或者不用相同的,全部加上一个或减去一个数之后相等的就好。 先是二分长度,然后通过height数组来判断是否可行这里写代码片#include <iostream>#include <cstring>#include <cstdio>#include <cmath>#include <algorithm原创 2017-06-06 00:24:59 · 265 阅读 · 0 评论 -
AC自动机 病毒侵袭持续中 HDU - 3065
多组数据呀呀呀。然后我们只用去掉那个count1=-1就好了#include <iostream>#include <cstring>#include <algorithm>#include <cstdio>#include <cmath>#include <queue>using namespace std;const int n = 26;int vis[3000];struc原创 2017-06-07 10:39:37 · 257 阅读 · 0 评论 -
字典树——hdu 2846
这个题还是有点实际意义的。然后就是和那个帽子的题相似,因为其中有一点掉了,所以特此标记。 代码#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <cmath>using namespace std;#define maxn 26typedef struct Trie{原创 2017-02-05 22:40:21 · 280 阅读 · 0 评论 -
字典树——hdu 1247 Hat’s Words
这个题,是将一个字符串拆开进字典树。这个还是蛮经典的。 其中也有点需要注意的地方 代码#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <cmath>using namespace std;#define maxn 26typedef struct Trie{原创 2017-02-05 22:45:33 · 195 阅读 · 0 评论 -
KMP——HDU 1867 A + B for you again
额,这里是一些细节容易错。 1.母串和子串是不定的,不一定母串是前面一个 2.当母串和子串相等的时候 代码#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <cmath>using namespace std;#define maxn 100005char s[ma原创 2017-02-06 12:21:01 · 255 阅读 · 0 评论 -
KMP——HDU 1686 Oulipo
额,这个题还是蛮好。对next数组进一步的认识 开始我们求next数组的模板是void GetNext(char *p){ memset(next1,0,sizeof(next1)); int plen=strlen(p); next1[0]=-1; int k=-1; int j=0; while(j<plen-1)//这里是plen-1,为什么原创 2017-02-06 16:19:23 · 287 阅读 · 0 评论 -
字典树——HDU 5687 problem c
其实这个题不是很难,然后有一个点卡住了的是,可能是 i hehehe i heh d hehe s h 然后答案会是No,如果没有num的话;因为我已经查到了有前缀为hehe的,然后我就讲经过hehe的v都为零了,这是不对的,因为中间可能还有小的。 代码#include <iostream>#include <cstdio>#include <cstring>#include <a原创 2017-02-05 15:08:39 · 261 阅读 · 0 评论 -
KMP 剪花布条 hdu 2078
额……这个题不难,但是因为有个地方制仗了,所以特地写出来……#include <iostream>#include <cstring>#include <algorithm>#include <cstdio>#include <cmath>using namespace std;const int maxn = 1e3+10;char s[maxn],p[maxn];int Next原创 2017-06-06 10:53:41 · 294 阅读 · 0 评论 -
KMP Theme Section HDU - 4763
这个题开始还没有觉得难。然后今天做了一下,发现这个很容易超时啊,如果不是先前后判断再去判断中间的。#include <iostream>#include <cstring>#include <algorithm>#include <cstdio>#include <cmath>using namespace std;const int maxn = 1e6+10;char s[maxn原创 2017-06-06 13:51:12 · 252 阅读 · 0 评论 -
字典树——字典树树模板
就是26//52叉树//模板#define MAX 26struct Trie{ Trie *next[MAX] ; //MAX个指针 int v;};Trie *root;void createTrie(char *str) //建树{ int len=strlen(str); Trie *p=root,*q; for(int i=0;i<l原创 2017-02-04 14:35:02 · 287 阅读 · 0 评论 -
ac自动机 hdu 2896. 病毒侵袭
差点忘了写。一开始RE,因为和之前一样id=str[i]-‘a’. 这里不用减。。。 然后开始Mle,把数组模拟队列改为了队列,然后c++提交#include <iostream>#include <cstring>#include <algorithm>#include <cstdio>#include <cmath>#include <queue>using namespace原创 2017-06-07 00:19:41 · 251 阅读 · 0 评论 -
AC自动机+有向拓扑判环 Taboo Kattis - taboo
Taboo Kattis - taboo 题意:给一些01串,然后问有没有串没有包含这些01串的。如果有的话就输出,如果为无限长的话,就输出-1分析:题目看错。。。做了好久,心好痛这个题就是AC自动机建图,bad点都处理好了(和之前DNA处理一模一样)。然后拓扑判断一下是不是有环,如果有的话就-1,否者就输出最长串就行了。输出可以用dfs直接来,当然也可以用优雅的树dp思想#define LL lo原创 2017-11-01 15:20:01 · 391 阅读 · 0 评论