![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
字符串
青春苦瓜
这个作者很懒,什么都没留下…
展开
-
c++ string常用函数
string 类有一些查找子串和字符的成员函数,它们的返回值都是子串或字符在 string 对象字符串中的位置(即下标)。如果查不到,则返回 string::npos。string: :npos 是在 string 类中定义的一个静态常量。这些函数如下:find:从前往后查找子串或字符出现的位置。rfind:从后往前查找子串或字符出现的位置。find_first_of:从前往后查找何处出现另...原创 2019-10-15 15:06:09 · 169 阅读 · 0 评论 -
回文树模板整理
有的算法只会模板题真不行,有的算法没有理解深刻照样不会做题,今天又看了一遍回文树,加深了一下理解,顺便整理一下模板超好理解#include<iostream>#include<algorithm>#include<cstdio>#include<cstring>using namespace std;const int MAXN = 1...原创 2019-10-14 19:32:33 · 163 阅读 · 0 评论 -
最小表示法 最大表示法 模板
先记下大佬的链接 链接时间复杂度:o(n)应用:比较两个环形串是否是同一字符串、判重、判同分异构等。int get_minstring(char *s) //最小表示法{ int len=strlen(s); int i=0,j=1,k=0; while(i<len&&j<len&&k<len) { ...原创 2019-09-29 16:43:21 · 84 阅读 · 0 评论 -
Hard problem CodeForces - 706C 字符串 dp
题意:给定n个字符串,让你求排成字典序的花费,这里不能交换任意两个字符串的位置,只能通过将两个字符串翻转来排序,每个字符串i的翻转代价是cost[i]这题和字符串没大有关系,就是个简单dp思路:考虑四种情况来转移就可以了,代码很清晰#include<iostream>#include<algorithm>#include<string.h>#in...原创 2019-10-03 20:01:10 · 110 阅读 · 0 评论 -
CodeForces - 165C Another Problem on Strings 前缀和+二分
题意:给定一个01串和k,求包含k个1的子串的个数思路:用前缀和记录到当前位置的个数,那么就可以知道某个子串的1的个数我们遍历字符串对于每个位置i,以他为开头的子串,要求1的个数为k的数量,我们只需要求有多少个值等于sum[i-1]+k就可以了,枚举肯定不行,因为是前缀和有序,我们二分,两次二分upper_bound(sum+1,sum+len+1+1,sum[i-1]+k)-low...原创 2019-10-04 10:30:40 · 164 阅读 · 0 评论 -
POJ - 1451 T9 字典树好题
题意:原来的按键手机都一般是九键,九键输入英文很麻烦,例如要键入“hello”,必须按两次键4、两次键3、三次键5、三次键5,最后按三次键6。现有一种新的输入方案名叫“T9”,只需要不重复地按键,软件就会使用内置的字典来查找最可能的与输入匹配的单词。例如,输入“hello”,只要依次按下4,3,5,5,6各一次即可。当然,这也可能是“gdjjm”一词的输入,但是因为这不是一个合理的英语单词,所...原创 2019-10-05 10:43:58 · 191 阅读 · 0 评论 -
Prefixes and Suffixes CodeForces - 432D KMP
题意:给你一个长度为n的长字符串,“完美子串”既是它的前缀也是它的后缀,求“完美子串”的个数且统计这些子串的在长字符串中出现的次数思路:找出完美子串个数不用说 next数组的本质问题在于统计每个完美子串的出现次数我们从后往前统计,对于每个位置i 对应的子串0~i 记作S1吧,考虑他的next[i]的前缀 即 0 ~next[i],记作S2吧如果S1出现一次,那么S2肯定会出现所以我...原创 2019-10-06 14:18:06 · 99 阅读 · 0 评论 -
POJ - 1743 Musical Theme 后缀数组+二分
题意:有N(1<=N<=20000)个音符的序列来表示一首乐曲,每个音符都是1…88范围内的整数,现在要找一个重复的子串,它需要满足如下条件:1.长度至少为5个音符。 2.在乐曲中重复出现(就是出现过至少两次)。(可能经过转调,“转调”的意思是主题序列中每个音符都被加上或减去了同一个整数值) 3.重复出现的同一主题不能有公共部分。思路:首先把问题转化成重复子串的问题:把原串每一位都...原创 2019-10-06 17:17:59 · 99 阅读 · 0 评论 -
POJ - 2774 Long Long Message 用后缀数组求两个串的最长公共子串
思路:把两个串中间加一个分隔符 然后连接起来 对新串求height数组然后看看height数组对应的两个串的起始位置(SA数组) 是不是分别在分隔符两端 即可#include<iostream>#include<string>#include<algorithm>#include<cstdio>#include<cstring&g...原创 2019-10-07 10:55:01 · 87 阅读 · 0 评论 -
HDU 4300 Clairewd’s message(EXKMP)
题意:给你一个二十六位的密码表A,然后给你一段文字S。前面部分完整的是密文,后面是未必完整的明文,最后输出完整的密文+完整的明文(长度要求最短)思路:首先将文字按照密码表转换S中的密文部分就全部都变成了明文,而明文部分都变成了乱七八糟snaosjaoixwqaw(用不到)。保存为T所以 不完整的明文部分可以通过 S的后缀和T的最长公共前缀(EXKMP模板)得出,求出的不完整明文保证最长,...原创 2019-09-29 10:32:11 · 94 阅读 · 0 评论 -
HDU 3336 Count the string kmp
题意:给定一字符串,求它所有的前缀在该字符串中出现的次数的和。思路:单纯的跑n遍kmp肯定TLE我们考虑next数组的本质对于任意位置i的next[i]的值,令len=next[i],如果len不等于0,说明0~i这一子串中(0到k-1 和i-k+1到i相等) 即0到k-1这一前缀子串 出现了两次那我们直接就判断 对于任意i 如果他的next[i]不为0 则对应前缀出现了2次 否则只出现...原创 2019-09-28 21:01:21 · 59 阅读 · 0 评论 -
HDU 6153 A Secret 扩展KMP
题意在母串中找模式串的所有后缀的匹配次数,并乘上各种后缀对应长度,再把所有的结果加起来%1e9+7输出。思路:把两个字符串都反转一下就变成了前缀匹配,就可以利用扩展KMP的性质了。因为extend[i] 表示的是从i到结尾的主串与模式串的最长公共前缀,这样遍历一遍主串,每一位对答案的贡献就是1+⋯+extend[i]=extend[i]×(extend[i]+1)/2,累加即可。举个栗子 ...原创 2019-09-27 17:23:14 · 95 阅读 · 0 评论 -
后缀数组入门,后缀数组模板整理
我自己懒得写,就是想写个博客保存下大佬的博客地址点这模板题大佬的模板:#include<iostream>#include<string>#include<algorithm>#include<cstdio>#include<cstring>#include<cmath>#include <set&g...原创 2019-08-24 20:46:43 · 107 阅读 · 0 评论 -
SPOJ - DISUBSTR 多少个不同的子串
求一个串中有多少个不同的子串每个子串一定是某个后缀的前缀,那么原问题等价于求所有后缀之间的不相同的前缀的个数。height表示的公共前缀的长度 = 相同串的个数(注意 这里相同串: 如果子串 abc 和abcd 公共前缀是abc,那么个数是3,重复的子串是:a,ab,abc)所以 子串总数-sum(height[])即可#include<iostream>#incl...原创 2019-08-24 21:40:48 · 158 阅读 · 0 评论 -
字符串Hash入门
字符串Hash可以通俗的理解为,把一个字符串转换为一个整数。但是根据以前学习的hash, 会有冲突。但是当我们取p为131 或者13331 ,mod取2^64时 99.99%的情况是不会有冲突的Hash公式unsigned long long hash[n]hash[i]=hash[i−1]∗p+id(s[i])这里的id(s[i]):我们直接取字母的ASCII码 或者 对字母x,我...原创 2019-08-22 13:47:36 · 130 阅读 · 0 评论 -
Crazy Search POJ - 1200 字符串哈希 细节优化
题意:给定一个字符串,其中含有不同的字母数量为m,现在求这个字符串中有多少个长度为n且长的互不相同的字符子串思路:一开始以为给个m没啥用,我还是固定的把P弄成131,但是一直T数组需要开到1.6e7 但是只能开两三个这么大的,多了就MLE,我也不知道为啥我就 将所有不同的字母从1~m编号,把字符串转化为一个m进制数,作为hash的对应关系一开始我是把每个前缀的hash[i]求一边,然后根...原创 2019-08-22 16:31:13 · 188 阅读 · 0 评论 -
HDU 5920 Ugly Problem (字符串模拟)
思路: 每次取当前数字的一半,如123111 取123,然后减1,即123-1=122 ,然后构造回文数字122221,然后用原来的数字减去 继续构造为什么减1? 就是如上面的例子 不减1 是123321 比原数都大细节:小于20的时候 如果大于11 构造个11和x 小于11就拆成(9+1)或一个一位数import java.math.BigInteger;import java.uti...原创 2019-09-13 11:58:37 · 138 阅读 · 1 评论 -
HDU 2222 Keywords Search AC自动机模板题 AC自动机模板
#include<cstdio>#include<cstring>#include<queue>using namespace std;const int N=26;const int MAXN=500005;struct Trie{ int next[MAXN][N],fail[MAXN],end[MAXN]; int root;...原创 2019-09-13 12:28:21 · 106 阅读 · 0 评论 -
codeforces 159D Palindrome pairs manacher
题意:求给定字符串中,互不覆盖的回文子串对数思路:用manacher求出一个p 序列 即预处理处所有的以某一个字符结尾的回文串的个数,然后枚举每一个位置i 通过p数组 把她包含在内的位置上的前缀数组后缀数组都加1,这样就知道一个位置i后面有多少个与i-1不相交的回文串具体看注释#include<iostream>#include<algorithm>#in...原创 2019-09-13 16:55:18 · 116 阅读 · 0 评论 -
[CodeForces-471D] kmp
题意:给定两个序列在a中找到一个子串 使得每个数同时加上某个整数(可以为负数)后和 b 相等问有多少个这样的子串思路:我们从变量中寻找不变量,对两个序列作前缀差,这样就把变量变成了不变量,然后跑kmp模板,巧妙!#include<iostream>#include<algorithm>#include<string.h>#include<...原创 2019-09-14 10:25:54 · 211 阅读 · 0 评论 -
KMP及EXKMP模板
kmp#include<iostream>#include<algorithm>#include<string.h>#include<map>#include<queue>#include<cmath>#include<cstdio>#define ll long long#define inf ...原创 2019-09-11 18:43:09 · 142 阅读 · 0 评论 -
manacher算法 马拉车算法入门 模版题HDU3068
艰难的算法学习之路,看了大佬的博客之后自己边理解边敲,一开始用string写的,cin关了同步之后交是TLE,然后各种优化,TLE,然后改成char型和scanf,还是TLE???????????????我真是个铁憨憨看来真是没理解透 ,把R=i+p[i] 写成1+p【i】改了之后不管cin还是scanf都能过啊!!!!!!!!!!!!!!难受#include<iostream>...原创 2019-08-15 15:26:20 · 148 阅读 · 1 评论