
——字符串——
huanghongxun
这个作者很懒,什么都没留下…
展开
-
后缀自动机 小结
以下主要来自CLJ的ppt,整理并添加了一些附注(错误讲解) 以下皆为口胡,为了装逼掉RP而搞成高端(?)的形式。 神犇轻喷。 Markdown面对长博文,学校的电脑有点力不从心啊。。1 前序定义1:SAM(s)SAM(s):表示字符串s的后缀自动机。 定义2:rev(s):逆序的s。 定义3:Reg(s)Reg(s):从状态ss开始可识别的所有字符串(到目标状态)。 定义原创 2016-04-10 14:26:01 · 1194 阅读 · 0 评论 -
UVALive 6085|Chemistry|字符串处理
https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=4096题目翻译一个化学式的定义如下:M := G | M G // 化学式G := S | S C // 原子团S := A | ’(’ M ’)’ // 原子团C := T | N E原创 2017-11-05 19:54:09 · 368 阅读 · 0 评论 -
CodeForces 182D(#117)|Common Divisors|KMP求循环节
题目大意给出s1和s2,求两字符串公共循环节个数。题解求最小循环节的方法: http://blog.youkuaiyun.com/huanghongxun/article/details/53213871 注意到循环节只有最小的和由最小的重复几次组成的。 所以先求出两串的最小循环节,并判断是否一致,如果不一致就不可能有公共循环节。 如果一致,那么求出两串的循环次数,那么两次数的公共因子的个数就是循环节个原创 2016-11-18 12:00:01 · 775 阅读 · 0 评论 -
HDU 3746|Cyclic Nacklace|KMP求最小循环节
题目大意给定字符串,问最少在末尾加多少个字符就可以让字符串存在循环节(循环节出现次数>1)。题解分析KMP的next数组,next[n]指最长的那个字符串是该字符串的前缀和后缀(但不是整个字符串)。情况1:那么如果类似ABCDABKKABCDAB这种情况,next[n]就指ABCDAB的长度=6。那么我们再补2个KK就可以了,最小循环节ABCDABKK=8,是(原长14)-6=8。 ABCDABK原创 2016-11-18 10:54:39 · 505 阅读 · 0 评论 -
字符串小记(KMP, AC自动机, Manacher)
PS:Ubuntu下的WPS总觉得和Windows下编辑的文档的兼容性不好。。字符串结构老是忘。。AC自动机:构造:点A的失败指针指向的是与该结点等价的点B,B表示的字符串是A表示的字符串的suffix(1)(从0开始)。那么A的失败指针为A的父亲的失败指针的对应字符儿子,如果没有这个儿子就继续沿失败指针走。那么代码就很好写了// 伪代码void ac_automat原创 2015-12-21 20:23:02 · 785 阅读 · 0 评论 -
CodeForces 432D|Prefixes and Suffixes|KMP|动态规划
题目大意求s的不同长度的既是s前缀又是s后缀的子串的个数题解考虑KMP的next数组。 因为next[j]表示lcp(s[1..j],s[1..k])(k<j)lcp(s[1..j],s[1..k])(k<j)。 故s[1..j]与s[1..next[j]]的关系是后者是前者的最长后缀,由于是最长,所以肯定不会漏情况,因此后者的出现次数是前者的出现次数+1(前者最后一次出现的后缀)。。。。。。。原创 2016-11-18 00:35:54 · 699 阅读 · 0 评论 -
机房水题欢乐赛 2016-04-22 下午
水炸了。。。T1: Word给出一个原串和n个字符串。 判断原串是否存在两个不相交子串按顺序连接起来在n个字符串中存在一样的。 输出一样的个数。【输入样例】ABCBABA 2 BAAB ABBA【输出样例】1【样例解释】BAAB这个单词是无法出现在句子中的。 ABBA这个单词则可以出现在句子中,当a=1,b=2,c=4,d=5或者a=1,b=2,c=6,d=7时即可。【数据约定】40%数原创 2016-04-23 12:17:00 · 524 阅读 · 0 评论 -
BZOJ 2342 SHOI 2011 双倍回文 Manacher
在Manacher处理出所有极长回文子串后。 枚举双倍回文子串的中心i,考虑快速查询出中心左侧的其他回文中心j,并满足:j+pj≥i,j−pj≥i−pij+p_j\geq i,j-p_j\geq i-p_i 即j+pj≥i,j≥i−12pij+p_j\geq i,j\geq i-\frac{1}{2}p_i 枚举的中心肯定都在#上。 发现由于i是单调增的(我们这么枚举),而j+pjj+p_j原创 2016-04-10 13:13:29 · 637 阅读 · 0 评论 -
BZOJ 3790 神奇项链 Manacher 树状数组
几个月没写manacher忘干净了。。。将一些回文串直接连接或前、后缀重复部分完全重叠,产生了新的字符串,问该字符串的连接次数。如abacada 考虑求出所有极长回文串。 即a[1..1,3..3,5..5,7..7],b[2..2,6..6],c[4..4],aba[1..3],aca[3..5],ada[5..7] 发现这些回文串按照其位置放置将区间完整覆盖的方案即我们所求。 也就是说,原创 2016-04-10 12:18:58 · 601 阅读 · 0 评论 -
POJ 1690 (Your)((Term)((Project))) 水题
POJ(1690)11878932huanghongxun1690Accepted744K0MSG++785B2013-07-29 16:07:35问题描述:小Y最近在学数学表达式,他很讨厌其中的括号(假设在小Y的表达式中只有小括号“(”、“)”),所以在小Y的表达式中是没有多余括号的(删去一对匹配的括号而使表达式值不变,原创 2013-07-29 16:36:00 · 1141 阅读 · 0 评论 -
BZOJ 4104 [Thu Summer Camp 2015]解密运算
恩。。夏令营。。#include #include using namespace std;const int N = 200001;#define FOR(i, j, k) for (i = j; i <= k; i ++)int a[N], b[N], c[N], d[N], ans[N];bool cmp(int x, int y) { if (原创 2015-12-31 21:44:15 · 711 阅读 · 0 评论 -
CodeForces 335b Palindrome 动态规划
求给定字符串的最长回文子序列。f[i][j]表示前i个字符已经处理到长度为j的回文子串的最右位置(为最大化答案)。g[i][j]表示前i个字符中离i最近的字符j的位置。有f[i][j]=max(f[i-1][j], p[f[i-1][j-2]-1][str[i]])一种是继承前i-1字符的结果,另一种是令str[i]为当前回文子串的结尾,结果为找到f[i-1][j-2]的左端前和s原创 2015-11-19 14:16:34 · 612 阅读 · 0 评论 -
CodeForces 455B A Lot of Games 字典树 博弈
给定n个字符串,进行k次游戏,每次游戏初始字符串为空串,两人轮流向新字符串末尾加1个字符且新串必须为n个字符串中的某个的前缀,不能操作的人输。第i次游戏输的为第i+1次游戏的先手,最后一句赢者胜,求第1次游戏先手是否必胜。前缀->字典树->判断博弈状态。对每次游戏有4个状态:先手可决定胜败,后手可决定胜败,先手必胜,后手必胜。必胜表示2人轮流胜。可决定成败表示输k-1次并最原创 2015-12-10 19:53:16 · 707 阅读 · 0 评论 -
2017 ACM-ICPC Hua-Lien Regional
A: Smooth Sequences如果一个序列是光滑的仅当相邻元素差的绝对值不超过d。称一个序列是半光滑的仅当修改至多一个元素使得序列变得光滑。给定序列询问是否光滑。题解半光滑的有3种情况,一种是连续两端差均不满足d,这种判断两端点差不超过2d即可,一种是一端的差不满足d,随便改,一种是中间某段不满足d,判断修改左右端点即可。#include &lt;bits/stdc...原创 2018-05-01 17:24:05 · 1173 阅读 · 1 评论