关闭

字符串匹配

题目描述对于一个字符集大小为C的字符串P,我们可以将任意两种字符在P中的位置进行互换,例如P=abcba,我们交换a,b就变为bacab,交换a,d就变为dbcbd,交换可以进行任意次。若交换后P变为了字符串Q,则我们称Q与P是匹配的。 现在给定两个字符集大小为C的字符串S,T,请你求出S中有多少个连续子串与T是匹配的。水题一个字符串可以这样表示,一个位置首次出现某个字符标为0,否则标为与最近一个...
阅读(218) 评论(0)

[51nod 1304]字符串的相似度

题目描述我们定义2个字符串的相似度等于两个串的相同前缀的长度。例如 “abc” 同 “abd” 的相似度为2,”aaa” 同 “aaab” 的相似度为3。 给出一个字符串S,计算S同他所有后缀的相似度之和。例如:S = “ababaa”,所有后缀为:ababaa 6 babaa 0 abaa 3 baa 0 aa 1 a 1S同所有后缀的相似度的和 = 6 + 0 + 3 + 0 + 1...
阅读(219) 评论(0)

字符串

题目大意求一个只由小写字母组成的长度为n的字符串中,有多少个不包含给定字符串的?DP我们可以考虑KMP 再处理nexti,c表示指针在第i个位置时接收字符c指针会移动到哪 fi,j表示填到第i个位置,目前指针为j 然后就可以转移#include #include #include #define fo(i,a,b) for(i=a;i<=...
阅读(130) 评论(0)

[bzoj十连测第五场 B]可持久化字符串

题目大意一个S的循环节T表示为可以找到一个正整数k使得S是TkT^k的前缀。 一次操作会在字符串尾部添加一个字符,并且你需要在每次操作后输出最小循环节长度。 要求可持久化与在线。只跳log步我们知道结论,答案就是i-f[i]。 如何可持久化KMP? 我们考虑一种做法让一次更新MP只需要跳KMP步。 具体的,如果目前在j,我们看f[j]+1是否与i匹配。 如果匹配,那么f[i]=f[j]+...
阅读(420) 评论(0)

归途与征程

题目描述简单的思路把B串倍长,那么新的串任意一个长度为M的子串都是B的循环同构串。 按照*号把A串分成了若干段,然后每一段都与B串做一次KMP匹配。 具体的,设一个bz[i,j]表示B串第i个位置为开头是否能与第j段匹配。 那么统计答案就是枚举循环同构串的头部,不断往后跑。 当然,如果A串的头部或尾部不是∗*,那么要把它弄成∗*号。 跑的速度很慢达到m^2,所以预处理suc数组表示每个位置...
阅读(265) 评论(0)

[JSOI2016]无界单词

题目大意一个只由a和b组成的长度为n的字符串,如果kmp后next[n]=0,则称之为无界单词。给定n和m,求长度为n的无界单词个数以及第m小的。第一问正难则反! 设f[i]表示长度为i的无界单词数量。 那其实只需要算出有界单词数量,再从总数里减去即可。 枚举j为最小的使字符串前j个与后j个相等。 一个其实并不太显然的性质: j一定小于等于i/2。 为什么呢? 嘿嘿自己想想吧(是我懒得...
阅读(538) 评论(0)

beyond

题目大意给定两个长度为N字符串A与B,求出最大的L,使得A与B的前L个字符所组成的字符串循环同构。N<=2000000。推一推我们知道循环同构的一个特征:可以找到分界点分成两个字符串,然后交叉相同。例如aab与aba,我们可以把第一个字符串分割成a与ab,把第二个字符串分割成ab与a,那么他们交叉相同。 因此我们可以枚举A中分界点i,那么假设能找到B中分界点j,需要满足以下条件: 1、A的后缀i...
阅读(268) 评论(0)
    个人资料
    • 访问:251935次
    • 积分:10104
    • 等级:
    • 排名:第1813名
    • 原创:743篇
    • 转载:4篇
    • 译文:0篇
    • 评论:189条
    最新评论
    文章分类