字符串
文章平均质量分 64
pbihao
这个作者很懒,什么都没留下…
展开
-
【BZOJ 3067】Hyperdrome 哈希+状压
首先假设内存足够大的话可以用f[i]表示i这个状态出现了多少次,状态是指异或前缀和,那么根据题意,当且只有在i==0或者二进制表示下只有一个1的情况下是合法状态,所以每加一个字符,就更新当前前缀和,又由于A^B==C->A^C==B 那么可以预处理出所有合法状态,然后分别和当前状态异或后得到需要的状态,加入答案。 但是内存不够,不能用数组,amp貌似是一个不错的选择,呵呵,又T又mle,那么h原创 2017-02-05 17:22:00 · 476 阅读 · 0 评论 -
【BZOJ 2434】[Noi2011]阿狸的打字机 Ac自动机+树状数组+dfs序
很简单的想法是,建造Ac自动机以后,如果一个单词节点的fail指针指向另外一个字符串的路径上,那么它对两者之间会造成贡献,基于这样的想法,我们需要做的就是如何快速的求这个贡献。考虑反向链接fail指针每个节点只有一个出边所以将会是一个树,根据刚才的性质,根节点会对他的所有子树中的节点造成答案的贡献,然后维护dfs序,就能快速知道他的子树区间。最后统计答案的时候离线处理。对于一个串,将Trie数上的原创 2016-12-20 16:06:12 · 305 阅读 · 0 评论 -
【BZOJ 1014】[JSOI2008]火星人prefix hash+splay+二分
一开始以为会是后缀数组之类的什么鬼东西,结果最后想了半天没想出来,结果想到hash秒出答案,所以有的时候应该考虑换一下思维方式。 因为题目要求查询和修改操作,维护一个splay,每个节点对应这个位置的字符和这棵子树的hash值,就能完成插入修改操作了,每一个询问的时候再二分最长前缀hash cheak就好了 然后。。。有一个函数忘了写return值结果BZOJ一直说我T,我改了很多常数还是T,原创 2016-12-20 10:29:57 · 192 阅读 · 0 评论 -
【BZOJ 2946】[Poi2000]公共串 后缀数组
Description 给出几个由小写字母构成的单词,求它们最长的公共子串的长度。 任务: l 读入单词 l 计算最长公共子串的长度 l 输出结果 Input 文件的第一行是整数 n,1,表示单词的数量。接下来n行每行一个单词,只由小写字母组成,单词的长度至少为1,最大为2000。原创 2016-12-13 16:13:42 · 274 阅读 · 0 评论 -
【BZOJ 1030】[JSOI2007]文本生成器 Ac自动机+fail树上dp
这道题要简单一些,其实我想提的是大白在介绍Ac自动机的时候引入的例题,刚刚看了一下,在P217 字串那道题,有相似之处,都是构造出fail树然后树上跑dp,唯一区别在于那道题是概率dp,很好的题目。 思想:首先,我们明确如果直接求有多上符合条件是非常麻烦的,所以我们采用逆向思维,求出所有不合法的方案然后用总的方案减去不合法的方案。至于怎么求不合法的方案,首先构造出fail树,然后当我们每随机生成原创 2016-12-06 09:36:09 · 372 阅读 · 0 评论 -
【BZOJ 2251】[2010Beijing Wc]外星联络 后缀数组
我的模板是用的大白上面的,但是比较坑的是,我发现例如aaaa求出来的sa数组并不正确,而这一道题中用哪个版也是过不了,找了很久发现在重新更新x数组的时候是需要判断是否越界的,改过来就对了,有点。。。。 思路很简单,够着sa数组和h数组然后暴力统计 #include #include #include #define maxn 3010 using namespace std; int n,t1原创 2016-12-12 20:49:33 · 225 阅读 · 0 评论 -
【BZOJ 1031】 [JSOI2007]字符加密Cipher 后缀数组sa数组
第一道后缀数组的题目,思想很简单,首先断环为链,然后利用sa数组的排序功能排序这2*n个后缀最后直接输出就好了。我的版是刘汝佳先生大白上面的,并且附上自己的理解 #include #include #include #define maxn 200010 using namespace std; char s[maxn]; int t1[maxn],t2[maxn],c[maxn],sa[ma原创 2016-12-08 20:27:31 · 261 阅读 · 0 评论 -
【BZOJ 3172】[Tjoi2013]单词 Ac自动机
回顾了一下Ac自动机,额,顺便重新背个版,原来那个这道题要被卡 这道题题意有点模糊,意思就是要你找到每一个单词出现的次数,其中他可以作为其他单词的连续字串出现例如样例中a自己本身出现了一次在aa中出现2次aaa中出现3次一共6次,同理aa本身出现一次在aaa中出现2次一共3次。 解法比较裸,根据刚才的题意,所以每一个单词只要他能作为另外一个单词的一段就能对答案贡献为一而在Ac自动机中的fail原创 2016-12-04 17:02:24 · 224 阅读 · 0 评论 -
【bzoj 4567】[Scoi2016]背单词 trie树+贪心
因为要维护的是后缀,所以把字符串倒叙插入,然后其实第一种情况是一定不能发生的,所以在一个字符串插入之前必须将他的所有的后缀全部插入,然后证明两个单词之间是不会有影响的,交换任意两个没有后缀关系的单词,其中一个的贡献加一,而另外一个减一所以没有影响。所以建一个新树,再跑贪心就好了 #include #include #include #include #include #define maxn 7原创 2016-11-02 10:38:58 · 380 阅读 · 0 评论 -
【poj 3461】Oulipo hash求子串hash值
我靠,这道题卡时限太厉害了吧,我用大质数取模居然能T,最好无赖改成了unsigned long long自然溢出才过,不过这样写hash很容易被卡啊。用hash过一次 字串hash公式 hash[l,r]=(hash[r]-hash[l-1]*p^(r-l+1)+Mod)%Mod#include #include #include #define LL unsigned long long us原创 2016-11-10 22:22:33 · 260 阅读 · 0 评论 -
[BZOJ 2741]【FOTILE模拟赛】L 分块+可持久trie树
首先很显然维护异或前缀和让询问区间连续一段变成询问两个单点. 然后就比较套路了,发现每一次都是询问一个区间内而且不满足我们已知知识内的一些特殊性质例如单调性,但是暴力又可以很容易的做出来,所以这个时候就可以考虑分块了设f[i][j] 表示第i块开始到j的最大异或值,然后就很简单了 #include #include #include #include #define LL long long原创 2017-03-01 16:20:39 · 317 阅读 · 0 评论