
【串】
文章平均质量分 59
WangMeow
这个作者很懒,什么都没留下…
展开
-
[HDU](1686)Oulipo ---KMP(串)★
OulipoProblem DescriptionThe French author Georges Perec (1936–1982) once wrote a book, La disparition, without the letter 'e'. He was a member of the Oulipo group. A quote from the book:Tout ava...原创 2017-08-24 17:05:03 · 189 阅读 · 0 评论 -
[SPOJ](694)Distinct Substrings ----后缀数组(不相同子串的个数)
题目传送门做法:一个字符串的某一子串一定是某一后缀的前缀而且有一个很容易发现的性质排完序后的后缀数组suffix(sa[i]),suffix(sa[i+1]),suffix(sa[i+2]),…… ,suffix(sa[n])相邻两后缀之间增加的子串数量为 (n -1)- sa[i]+1,但是相邻两头缀之间又有公共前缀,所以ans = (n-1)-sa[i]+1-height[i] ...原创 2018-10-12 22:14:31 · 124 阅读 · 0 评论 -
[Hihocoder](1445)后缀自动机二·重复旋律5 ---- SAM构造
题目传送门做法:我们知道SAM中 l[st] 数组的意义是状态st的最长子串的长度从前一状态到当前状态的转移所增加的子串数量:l[st] - l[slink[st]]AC代码:#include<bits/stdc++.h>#define IO ios_base::sync_with_stdio(0),cin.tie(0),cout.tie(0)#d...原创 2018-10-17 21:06:02 · 168 阅读 · 0 评论 -
[URAL](1297)Palindrome ---- 后缀数组 or Manacher(最长回文子串)
做法:最长回文子串两种解法:1. Manacher 复杂度O(n)2. 后缀数组+RMQ 复杂度O(n*log(n))AC代码://Manacher #include <iostream>#include <cstdio>#include <cstring>#include <cmath>#include <algor...原创 2018-10-13 16:09:26 · 199 阅读 · 0 评论 -
[POJ](2406)Power Strings ---- KMP(连续重复子串)
题目传送门做法:KMP利用最小循环节周期那么 周期个数 = len/ len - nex[len] 即是答案看了罗神的论文,试着用后缀数组做一下,TLE,这个题倍增会被卡常,DC3可过,但是时间复杂度远大于KMP。总结:KMP为最优解有时候同一个题,从不同的做法切入,即是A不掉,也是一次不错的收获(^-^)V温故知新~AC代码://#include<bits/stdc...原创 2018-10-13 20:17:21 · 207 阅读 · 0 评论 -
[Hihocoder](1419)后缀数组四·重复旋律4 ---- 后缀数组(最长连续重复子串)★
题目传送门做法:原题给的提示已经讲解的非常详细,这里说一下自己对下面式子的理解lcp( p - ( l - lcp (p,p+l) % l ) , p-l + lcp (p,p+l) % l +l)lcp(p,p+l)/l +1 是连续重复子串的个数lcp(p,p+l)%l 就是多出的一部分,这部分串来自后缀p+l比如原题中给的栗子,lcp(4,4+4) = lcp(4,8...原创 2018-10-15 14:18:51 · 162 阅读 · 0 评论 -
[洛谷] (P3804)【模板】后缀自动机 ---- SAM(模板题)
题目传送门做法:考察SAM的基本概念,即各个状态的endpos集合的大小怎么求?我们从parent树上自底向上跑,类似树的遍历(即回溯过程),去统计集合的大小即可。AC代码:#include<bits/stdc++.h>#define IO ios_base::sync_with_stdio(0),cin.tie(0),cout.tie(0)#def...原创 2018-10-18 12:44:25 · 290 阅读 · 0 评论 -
[HDU](4622)Reincarnation ---- 后缀自动机or后缀数组(区间内不同子串的个数)
题目链接做法:SA做法: 复杂度O(t * q * (n*log(n))) 暴力解法,注:(q>n) 7e8 险过……对于每次查询,把这段区间内的字符串,建立后缀数组,然后用(n-1)-sa[i]-height[i]计算。SAM做法: 复杂度O(n^2+q) 4e6在线建立串S每个后缀的SAM,用一个变量维护区间内子串的个数,保存到二维数组里面。离线查询即可后缀数组:AC...原创 2018-10-18 16:42:42 · 507 阅读 · 0 评论 -
[HDU](2594)Simpsons’ Hidden Talents ---- 扩展KMP
题目传送门做法:扩展KMP模板题扩展KMP:用来求文本串所有后缀与模式串的LCP详细教程:扩展KMP算法AC代码:#include&lt;bits/stdc++.h&gt;#define IO ios_base::sync_with_stdio(0),cin.tie(0),cout.tie(0)#define pb(x) push_back(x)#...原创 2018-10-15 19:22:05 · 151 阅读 · 0 评论 -
[HDU](6153)A Secret ---- 扩展KMP
题目传送门题意:给你两个串s1,s2,让你求s2的所有后缀在s1中出现的频率乘以后缀长度的和。做法:逆向思维,我们发现如果将s1,s2翻转,s2原来的所有后缀就变成了前缀。我们知道扩展KMP中extend[i]的含义是文本串后缀i与模式串的最长公共前缀的长度如果我们对s1,s2使用扩展KMP,求得extend[i],他表示的是s2整个字符串与s1后缀i的最长公共前缀的长度ni,那么s2...原创 2018-10-15 21:51:59 · 156 阅读 · 0 评论 -
[Hihocoder](1449)后缀自动机三·重复旋律6 ---- 不同长度下出现次数最多的子串(SAM)
题目传送门做法:原题中小Hi 的讲解循序渐进,比我好,好好吸收他的讲解即可。不过这里要说一个自己异议的地方,就是自己认为这一步没有必要。但是网上包括题目本身都加了这句话,我没加我也AC了。所以对此持疑惑态度。因为我们知道ans[i] 一定&gt;= ans[i+1],也可能是自己自动机写法的原因吧,如果有各位巨巨有想法,可以和我讨论~AC代码:#include&lt;...原创 2018-10-19 11:39:26 · 318 阅读 · 0 评论 -
【ACM-ICPC 2018 焦作赛区网络预赛】H. String and Times ---- 后缀自动机
题目传送门做法:计算出每个状态下的endpos,通过endpos在区间内统计maxlen[st] - minlen[st]+1即 maxlen[st] - minlen[st]+1 = l[st] - l[slink[st]];模板题AC代码:#include<bits/stdc++.h>#define IO ios_base::sync_with_...原创 2018-10-19 12:24:40 · 189 阅读 · 0 评论 -
[Hihocoder](1441)后缀自动机一·基本概念 ---- 模拟
题目传送门做法:原文中对SAM概念的讲解很详细了,值得入门的时候先学习这个~模拟即可AC代码:#include&lt;bits/stdc++.h&gt;#define IO ios_base::sync_with_stdio(0),cin.tie(0),cout.tie(0)#define pb(x) push_back(x)#define sz(x)...原创 2018-10-16 20:49:27 · 309 阅读 · 0 评论 -
[Hihocoder](1403)后缀数组一·重复旋律 ---- 后缀数组(最长可重叠重复子串)
做法:height[i]:lcp(sa[i],sa[i−1]),即排名为i的后缀与排名为i−1的后缀的最长公共前缀 裸的问题可重叠重复子串问题,二分height数组的最大值并满足>=k即可AC代码:#include<bits/stdc++.h>#define IO ios_base::sync_with_stdio(0),cin.tie(0),c...原创 2018-10-10 17:34:28 · 234 阅读 · 0 评论 -
【后缀自动机学习笔记】
前言历经两天,看了大大小小的后缀自动机的知识讲解,看来看去,还是觉得HihoCoder上的SAM系列讲解的最白话最让人容易理解。HihoCoder 讲解是按照 问题提出—&amp;gt;引入SAM概念----&amp;gt;模拟SAM----&amp;gt;构造SAM 这个顺序进行的,适合入门看。放一下链接:进入网页后,点里面的解题方法提示即可后缀自动机·基本概念后缀自动机·构造PS:推荐各位认真阅读上述...原创 2018-10-17 20:55:12 · 234 阅读 · 0 评论 -
【ACM-ICPC 2018 沈阳赛区网络预赛】I.Lattice's basics in digital electronics ---- 字典树
题目传送门做法: 用字典树存好译码词,然后模拟即可AC代码:#include <bits/stdc++.h>using namespace std;#define IO ios_base::sync_with_stdio(0),cin.tie(0),cout.tie(0)#define pb(x) push_back(x)#define s...原创 2018-10-28 11:56:18 · 311 阅读 · 0 评论 -
[SPOJ] (1812) Longest Common Substring ---- SAM(最长公共子串)
题目传送门做法:后缀家族的基本应用,之前学习了后缀数组的解法,后缀自动机的思想如下:给第一个串建立自动机,第二个串在自动机上匹配,通过tran数组,如果匹配就len+1,否则通过slink数组(fa)向前跳,直到能继续匹配。AC代码:#include<bits/stdc++.h>using namespace std;#define IO ios...原创 2018-10-23 15:38:13 · 250 阅读 · 0 评论 -
[Codeforces-Gym] (101667I)Slot Machines ---- KMP求前缀最小循环节★
题目传送门题意:给你n个数组成的序列,让你求从k+1位置开始,序列以p个数为周期。最小的k+p是多少。做法:kmp 算法的一个应用,即最小循环节是i-next[i] (吃了没文化的亏_(:з」∠)_ 详细讲解:KMP算法 —— next 数组的应用 --- 前缀中最小循环节,最大重复次数AC代码:#include<bits/stdc++.h>#define ...原创 2018-10-05 10:02:21 · 228 阅读 · 0 评论 -
[Hihocoder](1415)后缀数组三·重复旋律3 ---- 后缀数组(最长公共子串)
题目传送门做法:我们知道,字符串中任意一个子串都是某个后缀的前缀我们也知道了Height数组的含义是排名为i的后缀与排名i-1的后缀的最长公共前缀,即就是最长公共子串。现在题意让我们找两个串的最长公共子串,普通的KMP是无法解决这样的匹配的问题,因为KMP是完全匹配,而本题可出现子串的匹配。通过上述,我们发现,我们可以有这样的思路,即将两个串合成一个,求Height数组,那Height...原创 2018-10-11 20:56:18 · 173 阅读 · 0 评论 -
[POJ](1936)All in All ---字符串匹配(串)
All in AllTime Limit: 1000MS Memory Limit: 30000KTotal Submissions: 33567 Accepted: 14013DescriptionYou have devised a new encryption technique which encodes a me原创 2017-08-22 19:43:51 · 182 阅读 · 0 评论 -
[SDUT](2125)数据结构实验之串二:字符串匹配 ---字符串匹配(串)
数据结构实验之串二:字符串匹配Time Limit: 1000MS Memory Limit: 65536KBSubmit Statistic DiscussProblem Description 给定两个字符串string1和string2,判断string2是否为string1的子串。 Input 输入包含多组数据,每组测试数据包含原创 2017-08-22 20:49:06 · 273 阅读 · 0 评论 -
[YTU](2278)判断是否是子串(串) ---字符串匹配(串)
2278: 判断是否是子串(串)Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 30 Solved: 15[Submit][Status][Web Board]Description设s、t为两个字符串,分别放在两个一维数组中,m、n分别为其长度,判断t是否为s的子串。如果是,输出子串所在位置(第一个字符),否则输原创 2017-08-23 09:45:06 · 879 阅读 · 0 评论 -
[SDUT](2772)数据结构实验之串一:KMP简单应用 ---KMP(串)
数据结构实验之串一:KMP简单应用Time Limit: 1000MS Memory Limit: 65536KBSubmit Statistic DiscussProblem Description给定两个字符串string1和string2,判断string2是否为string1的子串。Input 输入包含多组数据,每组测试数据包含两行,第一行代原创 2017-08-23 19:02:18 · 343 阅读 · 0 评论 -
[SDUT](3311)数据结构实验之串三:KMP应用 ---KMP(串)
数据结构实验之串三:KMP应用Time Limit: 1000MS Memory Limit: 65536KBSubmit Statistic DiscussProblem Description有n个小朋友,每个小朋友手里有一些糖块,现在这些小朋友排成一排,编号是由1到n。现在给出m个数,能不能唯一的确定一对值l和r(l Input首先输入一个原创 2017-08-24 10:33:47 · 244 阅读 · 0 评论 -
[HDU](1711)Number Sequence ---KMP(串)
Number SequenceProblem DescriptionGiven two sequences of numbers : a[1], a[2], ...... , a[N], and b[1], b[2], ...... , b[M] (1 <= M <= 10000, 1 <= N <= 1000000). Your task is to find a number K原创 2017-08-24 16:03:58 · 204 阅读 · 0 评论 -
[HDU](3746)Cyclic Nacklace ---KMP(串)
Cyclic NacklaceProblem DescriptionCC always becomes very depressed at the end of this month, he has checked his credit card yesterday, without any surprise, there are only 99.9 yuan left. he i原创 2017-08-29 14:34:16 · 225 阅读 · 0 评论 -
[51Nod](1089)最长回文子串 V2 ---- Manacher算法
回文串是指aba、abba、cccbccc、aaaa这种左右对称的字符串。 输入一个字符串Str,输出Str里最长回文子串的长度。Input输入Str(Str的长度 <= 100000)Output输出最长回文子串的长度L。Input示例daabaacOutput示例5新知: Manacher算法是用来求“一个字符串中最大回文串”的线性算...原创 2018-03-17 16:46:51 · 174 阅读 · 0 评论 -
Codeforces Round #479 (Div. 3) ---- B.Two-gram
题意: 找一个出现次数最多的长度为2的子串AC代码:#include&amp;amp;lt;bits/stdc++.h&amp;amp;gt;using namespace std;#define rep(i,s,e) for(int i=s;i&amp;amp;lt;=e;i++)#define rev(i,s,e) for(int i=e;i&amp;amp;gt;=s;i--)#define a原创 2018-05-13 20:48:32 · 184 阅读 · 0 评论 -
Codeforces Round #504 ---- A. Single Wildcard Pattern Matching(串)
题目链接这场codeforces 好有趣 _(:з」∠)_ 感觉题目难易程度我感觉C<B<A ??? 终测A挂了好多人自己竟然在96组 RE了,判断的时候少打了一个 “=” …… QAQ赛后,自己的思路和实验室的小伙伴不太一样。做法:对于无*和去掉*后的s.length()>=t.length() 这种情况 讨论好后。我的策越是把s串 从*位置一...原创 2018-08-18 10:28:26 · 169 阅读 · 0 评论 -
Codeforces Round #506 (Div. 3) ---- A Many Equal Substrings (串) ★
题目链接题意:让你找里面包含m个子串s的最短串t,保证这个这个最短串是唯一的做法:日常被卡……举几个栗子:m = 3aba ----> aba ba baabaab -----> abaab aab aab我们发现这一类前缀和后缀相同的情况下,就是寻找最大前缀和后缀,答案就是在原s串的基础上补充m个后缀前一个字符+后缀类似模拟kmp~AC代...原创 2018-08-25 19:34:32 · 127 阅读 · 0 评论 -
[洛谷] (P3809)【模板】后缀排序
题目传送门字符串正式入坑……看了2天后缀数组,发明这个东西的人真是脑洞超级大 ORZ 推荐一下个人认为不错的讲解博客: 后缀数组详解 后缀数组——罗穗骞倍增算法代码详解AC代码:#include<bits/stdc++.h>#define IO ios_base::sync_with_stdio(0),cin.tie(0),cout.tie(0)...原创 2018-09-30 20:42:02 · 210 阅读 · 0 评论 -
[Hihocoder](1407)后缀数组二·重复旋律2 ---- 后缀数组(最长不可重叠重复子串)
题目传送门做法:最长可重叠重复子串可以利用Height数组轻易解决。不可重叠其实利用Height数组也是很巧妙地~同样基于二分的思路,我们二分这个长度k,找到Height数组&gt;=k的,把它们这些后缀分为一组,再判断后缀最大值与最小值的差值是否&gt;=k 即可。详细可参考下面罗穗骞的论文:https://wenku.baidu.com/view/5b886b1ea76e58fafa...原创 2018-10-11 16:07:04 · 189 阅读 · 0 评论 -
[POJ](1743)Musical Theme ---- 后缀数组(最长不可重叠重复子串)
题目传送门题意:给你一个长度为n的序列,序列中的元素大小为[1,88]。现在让你找重复主题:主题指序列中的一个子串,其中满足以下条件1.长度&gt;=52.子串元素间的差值相等。3.重复出现的同一主题不能有公共部分。求满足题意的最大主题长度,即就是最长不可重叠子串做法:预处理的时候,把原输入的数组差分处理成新数组。求得的最大长度为kans就是k+1比如:n = 101...原创 2018-10-11 17:22:02 · 210 阅读 · 0 评论 -
[HDU](5536)Chip Factory ---- 0-1字典树★
题目传送门Hint: 2015ACM/ICPC亚洲区长春站-重现赛做法:0-1字典树模板题,因为题目中要求,i,j,k是不同的,所以当我们选取两个数求和找与这个值异或最大的数时,要先把这俩求和的数从字典树中删掉,求完和,再增加。AC代码:#include<bits/stdc++.h>#define IO ios_base::sync_with_s...原创 2018-10-03 21:17:19 · 150 阅读 · 0 评论 -
[BZOJ](4260)Codechef REBXOR ---- 0-1字典树+DP★
题目传送门做法:需要用到异或前缀和,即异或前缀和与普通前缀和差不多,它满足sum[l] + sum[l+1] + sum[l+2] +……+sum[r] = sum[r]^sum[l-1] 所以我们想要求前i个数中任意区间的异或最大值要怎么做呢? 我们可以讲异或前缀和插入字典树,每次在字典树查找与【当前异或前缀和】异或 最大的 前缀和 就是答案。 仔细想想为什么嘞~ 因为查询出来的结...原创 2018-10-04 10:54:17 · 175 阅读 · 0 评论 -
[SPOJ] (1812) Longest Common Substring II ---- SAM(多个串的最长公共子串)
题目传送门做法:类似求两个串的最长公共子串。我们对第一个串建立自动机,然后把剩余的n-1个串放进自动机上匹配。每个串都保存它们在每个状态上的匹配的最大长度ml, 然后对于每个状态,维护一个数组mn[p],表示当前串在此状态的LCS。对于每个状态我们要取mn[p]中的最小值。然后答案就是所有状态中最小值的最大值。注意,如果当前状态存在祖先,那么它的祖先的ml要更新其length,为什么呢...原创 2018-10-24 15:44:28 · 457 阅读 · 0 评论