字符串
qq_45778406
这个作者很懒,什么都没留下…
展开
-
Maximum repetition substring(重复次数最多的连续重复子串)
后缀数组模板题参考论文先穷举长度 L,然后求长度为 L 的子串最多能连续出现几次。首先连续出现 1 次是肯定可以的,所以这里只考虑至少 2 次的情况。假设在原字符串中连续出 现 2 次,记这个子字符串为 S,那么 S 肯定包括了字符r[0],r[L],r[L∗2],r[L∗3],……r[0], r[L], r[L*2],r[L*3], ……r[0],r[L],r[L∗2],r[L∗3],……中的某相邻的两个。所以只须看字符r[L∗i]和r[L∗(i+1)]r[L*i]和 r[L*(i+1)]r[L∗i原创 2021-04-14 21:15:43 · 532 阅读 · 0 评论 -
KMP模板
#include <iostream>using namespace std;const int N = 1e5+5, M = 1e6+5;int n, m;char s[N], p[M];int ne[N];int main() { cin >> n >> p + 1 >> m >> s + 1; // 求ne数组过程,其实就是自己匹配自己的过程 for (int i = 2, j = 0;原创 2021-04-14 16:43:37 · 72 阅读 · 0 评论 -
UVA10298 Power Strings 计算最小循环节多种方法
UVA10298 Power StringsLingk一.后缀数组比较是否有长度为k的最小循环节, 直接找LCP(1, 1 + K)是否等于n - k即可eg ababababab长度为2的最小循环节则LCP(1, 3) == 8;倍增方法偏慢常数过大, 正解为DC3方法倍增能过洛谷上的题2.8秒#include <iostream>#include <cstring>#include <algorithm>#include <cstdio&原创 2021-04-14 16:42:57 · 106 阅读 · 0 评论 -
(Palindrome)各种计算最长回文字串的方法实现及分析
Palindrome URAL - 12971,刚学的后缀数组 时间复杂度O(nlog(n))空间复杂度O(n)eg :计算 “vababa”的最长回文字串先加上特殊字符分割防止这个位置有公共前缀,然后再加上该字符的串逆序。生成 “vababa#vababa” 下标从1开始然后求出后缀数组的sa, heigh数组, 用倍增的方法查询第l个后缀和第r个后缀的最长公共前缀然后遍历1~n, 分奇偶回文串讨论即可奇:vababa#ababav 的公共前缀 即 LCP(i,n−i+1)∗2−1LCP(原创 2021-04-12 17:08:43 · 199 阅读 · 0 评论 -
后缀数组模板RMQ
Link#include <bits/stdc++.h>#include <cstring>#include <algorithm>using namespace std;const int N = 1000010;int n, m;char s[N];int sa[N], x[N], y[N], c[N], rk[N], height[N];//sa[i]排名为i的后缀是哪一个void get_sa(){ for(int i = 1; i &原创 2021-03-31 19:18:52 · 146 阅读 · 0 评论 -
AC自动机+矩阵快速幂2 POJ - 2778
Link题意:有m种DNA序列是致病的,问长为n且不包含致病序列的DNA有多少种参考题解,思路:我们可以先对这m种DNA建立trie树, 然后建立一个图,离散数学中的, 然后快速幂即可,建图是对于相邻两点来建的, 如果a->b且b不为一个治病串的终点那么其就是可以到达的。#include <cstdio>#include <cstring>#include <queue>using namespace std;const int mod = 1原创 2021-03-19 22:07:27 · 93 阅读 · 0 评论 -
poj1625AC自动机 +dp +大数模板
LINK题意:给你n个字符(ascll码可能为负数), 再给你p个字符串,全由(全是n个字符组成, 不包含别的字符), 在给你一个整数p问你由这个n个字符组成的长度为p且其字串不包含那p个病毒串的字符串有多少个(n个字符可以重复选择)#include <map>#include <iostream>#include <cstdio>#include <cstdlib>#include <cmath>#include <ioman原创 2021-03-19 15:25:11 · 101 阅读 · 0 评论 -
AC自动机模板(HDU - 2222)
题目描述给定 n 个长度不超过 50 的由小写英文字母组成的单词准备查询,以及一篇长为 m 的文章,问:文中出现了多少个待查询的单词。多组数据。输入格式第一行一个整数 T,表示数据组数;对于每组数据,第一行一个整数 n,接下去 n 行表示 n 个单词,最后一行输入一个字符串,表示文章。输出格式对于每组数据,输出一个数,表示文中出现了多少个待查询的单词。输入样例15shehesayshrheryasherhs输出样例3数据范围对于全部数据,1≤n≤104,1≤m≤原创 2021-03-16 20:59:10 · 213 阅读 · 0 评论 -
kmp,exkmp
1.扩展kmp算法呢是对kmp算法的扩展,扩展kmp算法也有一个和kmp函数名字一样的next数组,还有一个ex数组。2.扩展kmp算法的可以用o(m+n)的复杂度求出字符串s1任意后缀和字符串s2的最长公共前缀。3:扩展kmp算法里ex数组:ex[i] == j表示s1以i为起始的后缀与s2的最长公共前缀。扩展kmp算法里next数组:next[i] == j表示s2以i为起始的后缀与s2的最长公共前缀两者作用都一样当然可以调用同一个函数咯~kmp算法里next数组:next[i] == j表示原创 2021-02-21 22:37:28 · 134 阅读 · 0 评论 -
字符串hash双值hash
双值Hash就是用两个不同的mod值来计算Hash,如果两个Hash值都相等才认为是同一个字符串,Hash冲突概率降低了很多,但是常数大,容易被卡。时间上:自然溢出法<单Hash+大质数<双Hash+大质数。Hash的几个常用公式:Hash递推:Hash[0]=0;Hash[i]=(Hash[i-1]*p+s[i]-‘a’+1)%mod;区间Hash值:Hash[L…R]=(Hash[R]-Hash[L]*p^(R-L+1)+mod)%mod;这里减法可能会溢出eg:ha原创 2021-02-21 17:10:55 · 3214 阅读 · 1 评论 -
2017final英文语句格式简单检查 (20分)
L1-8 2017final英文语句格式简单检查 (20分)英文书写中,句首字母通常为大写,其余为小写,单词“I”除外,单词与单词之间用一个空格隔开,句中用“,”断句,句末用“.”结束,“,”和“.”与其前置单词间无需空格隔开。 Word等文本编辑器通常根据以上规则,对我们输入的英文语句进行自动修正。 请编写一个功能,可对输入的一句英文句子,根据以上规则,修订为正确格式后输入。 例如,对于输入的英文句子“This is an Example with one mistake.”, 由于单词“Example原创 2020-10-27 20:42:31 · 858 阅读 · 0 评论 -
L1-5 回形针,yyds! (15分)
回形针,是一种回型的针。(废话输入格式:一行字符串,长度不超过104。输出格式:将输入的字符串以螺旋状输出,使得输出呈现一个正方形(行数=每行字符数),要求该正方形在大小足以容纳该字符串的前提下尽可能小。若按指定方式填充后该正方形内有空缺,则空缺部分以空格填补。输出从左上角开始向右行进,遇到拐角即右转(示意图:回形针.png)。输入样例:This is a test case.输出样例:Thiscasei.stset a思路:直接利用简单搜索解决,key point原创 2020-10-27 18:56:38 · 1145 阅读 · 0 评论 -
L1-7 qls学习字符串 (20分)
qls最近在研究字符串问题,于是他找来他的好友强哥一起玩字符串小游戏,游戏规则如下:首先qls要给出一串字符串,强哥要先对其处理,首先将字符串中的所有数字变成空格;然后消除原文中多余空格,把相邻单词间的多个空格换成 1 个空格,把行首尾的空格全部删掉,把标点符号前面的空格删掉,把原文中所有大写英文字母变成小写。处理完之后qls对强哥进行询问,每次将某些单词或字母或某句话(包括空格)替换成另一个单词或字母或另一句话(包括空格),强哥觉得qls在为难他,你能帮帮他完成这个游戏吗?输入格式:第一行一个整数n表原创 2020-10-19 14:35:47 · 920 阅读 · 0 评论