![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
字符串
文章平均质量分 57
JK Chen
ACM退役选手,战绩4金6银
展开
-
AT4163 [ARC099D] Eating Symbols Hard(Hash)
题意:给一个无限长度的数组(−∞,∞)(-\infty,\infty)(−∞,∞),初始全为0,有一个指针初始指向0。给一个字符串表示操作。操作+-<>为指针所指+1,指针所指-1,指针往左,指针往右。问多少子区间的操作得到的结果与最终数组一致。解析:解决负下标区间变为[1,n+1,2n+1](0→n+1)[1,n+1,2n+1](0\to n+1)[1,n+1,2n+1](0→n+1),这段区间的值进行Hash。然后每次pos[i]pos[i]pos[i]的数+1+1+1就是Has原创 2020-10-07 16:44:33 · 267 阅读 · 0 评论 -
Minimum Index(所有前缀的最小后缀 Lyndon分解 KMP 最短后缀匹配)
https://ac.nowcoder.com/acm/contest/5669/I题意:就是求每个前缀的最小后缀,答案是用最小位置算解析:先lyndon分解,显然最后的lyndon串的字典序最小。在最后lyndon串内部,用KMP判断。当后缀等于前缀时,即当pre...prepre...prepre...pre时,pre为最小字典序。这个用KMP求,但是KMP求的是最长,我们求的是最短(aa...aaaa...aaaa...aaKMP得到aa,而实际最小是a)。这个处理办法是对aa再次跳fa原创 2020-07-25 17:39:18 · 843 阅读 · 0 评论 -
4.2美团笔试题4(哈希 二分)
解析:先哈希处理。(判断子串是否相同)然后枚举两个位置i,ji,ji,j,代表ABA中两个A的起点是i和j。首先[i,i+k−1][i,i+k-1][i,i+k−1]和[j,j+k−1][j,j+k-1][j,j+k−1]要相同,然后二分找到最大的L使得[i,i+L−1][i,i+L-1][i,i+L−1]和[j,j+L−1][j,j+L-1][j,j+L−1]。此时以iii开始,[j+...原创 2020-04-02 21:31:26 · 3462 阅读 · 3 评论 -
K - Klingon Warfare(后缀数组 想法 子树相同)
https://vjudge.net/problem/Gym-101655K题意:给出两棵树,点上有字母,每个点的儿子之间有固定的顺序(先来的在左边)。问两棵树的最大siz完全相同子树的siz。解析:先建好树,考虑怎么压缩表示子树。两个子树完全相同当且仅当dfs序列相同。两个大串,即使有两个子串相同,也不一定是表示一个子树。所以我们加上类似括号的标识符:好处是匹配长度是字母长度的3倍,...原创 2020-03-21 17:19:22 · 181 阅读 · 0 评论 -
D. Reachable Strings(想法 哈希hash)
http://codeforces.com/problemset/problem/1320/D题意:给一个01串,每次询问两个子串是否可以转换。转换操作为不限次数的011与110互换。解析:对于一个串的0序列,再人任意次操作后,0序列的每个0的奇偶性都不会变化。所以可以hash0的奇偶性。(直接hash[i]=hash[i-1],如果是0再变化会比较方便,不需要lowerbound了)...原创 2020-03-18 16:15:58 · 196 阅读 · 0 评论 -
D - Ambiguous Encoding(字符串 最短路)
https://vjudge.net/problem/Aizu-1406题意:给出n个01字符串,问是否存在一个大字符串,可以由这些01串以不同的方式组成。01串长度<=16,n<=1000解析:我的做法很有意思。我是用(长度+十进制数值)塞入unordered_set记录的,所以要去除重合的问题,即上图中直接开始搜01101如果正向暴力匹配的结果:(找一个以当前串作为...原创 2020-02-17 12:53:31 · 389 阅读 · 0 评论 -
Accept or Reject(马拉车)
求是否有长度为k的回文子串代码:#include<bits/stdc++.h>using namespace std;#define debug(i) printf("# %d\n",i)typedef long long LL;const int N=5e5+5;char s[N];char ss[2*N];int p[2*N];void manacher(cha...原创 2020-02-06 18:52:25 · 565 阅读 · 0 评论 -
D. Road Improvement(字符串Hash)
http://codeforces.com/problemset/problem/543/D题意: 给出两个串,xy,y可能为x的某个子串变化而来。变化(a,b)(a,b)(a,b),表示将所有a变为b,b变为a,每个字符只会出现在最多一个变化。问哪些子串。解析:枚举每个位置,进行单个字母的字符串Hash比较即可(找到x中字母a的位置上的字母b,看看相应Hash值是否相同)代码:#inc...原创 2019-11-08 21:29:52 · 291 阅读 · 0 评论 -
D. AB-string(想法 字符串)
原题: https://codeforces.com/contest/1238/problem/D题意: 给出一个AB串,问多少个子串满足这个子串的任意一个字符都属于这个子串的某个回文串。解析: 正常做法不会,想了想为什么题目要只有AB字符。当出现子串以A…B…A开头,那么之后塞什么都是满足要求的。假设之前为ABBA,如果再来一个A,AA形成回文串。再来一个B,BAB形成回文串。代码:/*...原创 2019-10-09 20:46:45 · 521 阅读 · 0 评论 -
Moles(笛卡尔树 Z Algorithm)
original link - http://poj.org/problem?id=4005题意:有n个数,按照给出的顺序依次插入二叉搜索树,然后从小到大遍历(从根开始往下走,最后回来),路过的点值模2构成一个01序列SSS,求这个序列中出现匹配串TTT的次数。解析:可以分为两个问题:怎么构造出树的结构、怎么查询匹配串出现次数。如果直接暴力查看是哪个点的儿子,一条链的情况下复杂度O(n...原创 2019-10-05 18:57:59 · 225 阅读 · 0 评论 -
Distinct Substrings(后缀匹配 Z Algorithm)
original link - https://ac.nowcoder.com/acm/contest/1099/C题意:给出一个字长度为nnn,字符集为[1,m][1,m][1,m]的字符串,求出在末尾添加字符x∈[1,m]x\in[1,m]x∈[1,m]后,分别增加多少原先没有的字符串。解析:题意就是加入xxx后,末尾最长可以匹配多少。观察对于xxx的最长匹配串yyy。发现匹配的模式...原创 2019-10-01 20:18:53 · 220 阅读 · 0 评论 -
MUV LUV EXTRA(KMP求字符串最短循环节)
original link - http://acm.hdu.edu.cn/showproblem.php?pid=6740题意:给出一个字符串,后面的循环节为yyy,该循环节的循环长度为xxx,求ax−byax-byax−by的最大值。例如102010201020的一个循环节020202,那么这个循环节的最大循环长度为3(020)3(020)3(020)。解析:先反转一下,对于某个循环节...原创 2019-09-28 19:36:56 · 1190 阅读 · 3 评论 -
Strange Sorting(字符串变换 二进制分解)
original link - http://codeforces.com/problemset/problem/484/C题意:给出一个字符串和kkk,对i∈[1,n−k+1]→[i,i+k−1]i\in[1,n-k+1]\to[i,i+k-1]i∈[1,n−k+1]→[i,i+k−1]做一次字符串变换,求最后的结果。解析:我们可以将所有操作看成如下序列:变换、(循环左移、变换)n−k、...原创 2019-09-11 21:14:50 · 431 阅读 · 0 评论 -
Lyndon分解(后缀中的最小串)
After AllLyndonLyndonLyndon串: 对于字符串xxx,如果xxx的字典序严格小于xxx的所有后缀的字典序,我们称xxx是简单串,或者LyndonLyndonLyndon串。近似LyndonLyndonLyndon串: 若xxx为LyndonLyndonLyndon串,则xxxx′xxxx'xxxx′为近似LyndonLyndonLyndon串,x′x&...原创 2019-09-05 13:45:55 · 1886 阅读 · 0 评论 -
最小表示法(字符串同构字典序最值)
original link - http://poj.org/problem?id=1509题意:求出一个字符串的循环同构中,字典序最小的那个。解析:假设定下两个指针:i,ji,ji,j,考虑比较这两个位置开始的字典序。往后延,直到遇到一个不一样的字符,然后比较这对字符的大小。假设中间走过kkk个相同的字符,然后得出i<ji<ji<j,那么显然,对于[i...原创 2019-09-01 09:51:53 · 463 阅读 · 0 评论 -
B. Russo's Russian(字符串处理)
original link - http://codeforces.com/gym/102299/problem/B题意:M = H '|' P 或者 '|' M 或者 PH = M 或者 '$'P = P ':' T 或者 TT = '{' M '}' 或者 数字串可以在任意连接处塞空格,问给出的串是否可以视为MMM串。解析:各种情况判一判就行了。注意MMM和PPP的分隔符要在...原创 2019-08-22 19:13:28 · 209 阅读 · 0 评论 -
Walk Through Squares(AC自动机 dp)
original link - https://cn.vjudge.net/contest/320257#problem/K题意:求包含串A,BA,BA,B的串的个数,要求满足num(′R′)=n,num(′D′)=mnum('R')=n,num('D')=mnum(′R′)=n,num(′D′)=m解析:先把两个串做...原创 2019-08-21 21:17:32 · 259 阅读 · 0 评论 -
Typing practice(KMP+数组优化 或 AC自动机+dp)
原题:牛客网暑期ACM多校训练营(第九场)F题意:有n个串(n&amp;lt;=4),和一个空串A,一个操作串.操作串的每一个字符代表一个对A的操作小写英文字母代表往A后面添加这个字母字符’-‘代表删除A最后面的一个字符(如果没有就不操作)求每次操作后,最少添加多少个(不是真的添加)字符使n个串中至少有一个串为A串的后缀解析:因为模式串最多只有4个,所以我们其实不需要用到...原创 2018-08-20 20:19:32 · 1140 阅读 · 0 评论 -
字符串Hash
Hash:https://blog.csdn.net/Coldfresh/article/details/79476915BKDRHash 无论是在实际效果还是编码实现中,效果都是最突出的unsigned int BKDRHash(char *str){ unsigned int seed = 131; unsigned int hash = 0; while (*str) {...原创 2018-10-09 15:14:27 · 328 阅读 · 0 评论 -
马拉车算法(例题:Non Super Boring Substring )
Manacher算法马拉车算法,O(n)预处理每个点为中心时的回文串长度//aa -&gt; $#a#a#//aba -&gt; $#a#b#a#void manacher(char s[],int len){ int i,j,len1; for(i=0;i&lt;2*len+2;i++)ss[i]='#'; for(i=0;i&lt;len;i++)ss[i*2...原创 2018-10-19 16:02:24 · 704 阅读 · 0 评论 -
2200专项:C. Compress String(后缀数组 之前出现过的字符串)
原题: http://codeforces.com/problemset/problem/1120/C题意:给一个字符串,你可以将字符串分成很多个部分,这个部分在前面出现过的话(可以是多个部分并起来后,其中的字符串),那么这个部分花费可以变成b。否则,你只能选择一个长度为1的部分,其花费为a。求最小花费。解析:首先,你需要处理出所有的子串在之前是否出现过:Sx,yS_{x,y}Sx,y是...原创 2019-03-20 22:05:03 · 273 阅读 · 0 评论 -
2200+专项:E. The Supersonic Rocket(凸包(去掉共线) KMP)
original: http://codeforces.com/problemset/problem/1017/Equestion:Give you two sets of points in 2D plane. For each set,you should process it’s convex hull. And in the end,you should judge whether t...原创 2019-05-21 09:26:58 · 433 阅读 · 1 评论 -
E. Check Transcription(字符串Hash)
原题: http://codeforces.com/contest/1056/problem/E题意:给出一个01串,需要对应到另外一个串,你可以让0等于串r1,1等于r2,要求r1不等于r2且都非空,将所有的0和1改变后要等于另外一个串。解析:考虑字符串Hash,枚举0的长度,根据数量和长度算出1的长度,然后一个一个用hash值去判断是否相同即可。这里说一下一种常用的hash以及如何取...原创 2019-07-21 16:29:44 · 242 阅读 · 0 评论 -
Shift - And字符串快速匹配(Regular Number)
知识点应用场合:用来解决字符集有限的情况下,单串匹配,或者规定每种字符的合法位置的情况下的匹配问题。过程:用bitset[i][j]=1表示第iii种字符可以出现在第jjj位使用bitset  ansbitset \;ansbitsetans记录当前状态到了下一个位置,字符为第iii种时,ans<<=1;ans|=1;ans&=bit[...原创 2019-07-31 22:26:58 · 340 阅读 · 0 评论 -
I - string(本质不同子串数量 本质不同回文串数量 两个串跑后缀自动机 回文自动机)
原题: https://ac.nowcoder.com/acm/contest/884/I题意:给出一个串,找出一个最大的子串集合,使得集合内任意两个串不相同(翻转后也算相同:abc=cbaabc=cbaabc=cba)解析:尝试用后缀自动机来做(可以得出出现次数为kkk的子串的数量)。观察一个串与它的翻转:abac,cabaabac,cabaabac,caba。分析情况:设F(s)...原创 2019-07-27 18:27:15 · 1654 阅读 · 0 评论 -
扩展KMP
原题: http://acm.hdu.edu.cn/showproblem.php?pid=6629题意:求出一个字符串的所有后缀与这个字符串的公共前缀长度就是扩展KMP的模板#include<bits/stdc++.h>#define ll long longusing namespace std;const int MAX=1000100; //字符串长度最大值in...原创 2019-08-05 18:10:27 · 159 阅读 · 0 评论 -
DC3构造后缀数组
/* 之前一直用倍增法,发现有些题目卡倍增法,而DC3却能AC,所以顺便弄了 DC3的模版,看以后会不会用到,嗯,就是酱紫 提一些注意点:1.MAXN开n的十倍大小; 2.dc3(r,sa,n+1,Max+1);r为待后缀处理的数组,sa为存储排名位置的数组,n+1和Max+1 都和倍增一样 3.cal...原创 2019-08-05 19:59:55 · 314 阅读 · 0 评论 -
2019牛客暑期多校训练营(第七场)String(想法)
原题: https://ac.nowcoder.com/acm/contest/887/A题意:给出一个01串,让你分成最少段完美串,定义为:在其循环同构中字典序最小。解析:显然我可以将字典序递增的一段作为单位去考虑:00101101001→001−011−01−00100101101001\to001-011-01-00100101101001→001−011−01−001发现递归的去...原创 2019-08-08 17:38:06 · 206 阅读 · 0 评论 -
Z Algorithm(后缀匹配)
介绍一个和马拉车算法很像的东西,可以O(n)O(n)O(n)求出一个串的所有后缀与前缀的匹配长度。因为往后扩不会返回,右端点一直加,所以时间复杂度为O(N)O(N)O(N)两个串的情况如果要匹配两个串,串xxx的所有后缀匹配串yyy的前缀,只需要使用特殊字符将xxx连到yyy后面即可。orginal link - http://acm.hdu.edu.cn/showproblem....原创 2019-08-20 13:16:39 · 353 阅读 · 0 评论 -
Queries on a String (字符串子顺序)
原题:Gym - 101755L题意:有个案例字符串和空字符串,有q个对第二个字符串的操作,push一个字母或是pop一个,问操作之后的字符串是不是案例字符串的子顺序串解析:开始的时候我对每个字母x找到下一次x出现的位置,结果T了,改进了一下对每一个位置找出所有26个字母下次出现位置代码:D read(){ D ans=0; char last=' ',ch=ge...原创 2018-07-26 18:17:38 · 615 阅读 · 1 评论