ACM_字符串
文章平均质量分 57
比较基础的:哈希,kmp,manacher,trie等。比较复杂的:状态机等。
I_have_a_world
这个作者很懒,什么都没留下…
展开
-
codeforcs 1430E. String Reversal(字符串,数据结构)
题目链接:https://codeforces.ml/contest/1430/problem/E题意:给定一个数字n,和一个长度为n的字符串c。每次只能够相邻字符交换,问最少多少次能够将字符串变为原串的反串。codeforces->secrofedoc.题解:还有25分钟的时候看的这一题,题意很简单,于是就打算来想一想。如果各个字符不相等,那么容易得到为n*(n-1)/2。不一样的时候,先从1到n排,考虑排第i个数是贡献最小,且对后面影响最小,那么codeforces排第第2个字符时原创 2020-10-17 17:32:47 · 155 阅读 · 0 评论 -
拼凑(字符串)
题目:https://ac.nowcoder.com/acm/contest/7509/B拼凑题意描述:s="puleyaknoi",给定t个很长很长的小写字母字符串(<=1e5),问最短的子序列中能找到s的序列的长度。分析:暴力肯定不行,因为s中每个字符都不相同,若第i个字符为’u’,那么我们下一步只用找’l’就好了。那么怎么记录下一个字母出现的位置呢?我们可以倒着推,每次找一个字母的下一位的位置,那么倒着推是就需要记录下下一位的位置,等于到这一位时直接将pos赋给他,如果没有下一位就为原创 2020-09-26 08:26:53 · 382 阅读 · 0 评论 -
cf 1437B. Reverse Binary Strings(贪心,思维,字符串)
题目链接:https://codeforces.ml/contest/1437/problem/B题意:给定一个长度为n,的n/2个0,1d的01串。每一次操作可以反转一段子串,问最少多少次可以将它反转为01相间的字符串,如010101或10101010题解:看到这一题, 题意很好懂,看到样例,猜是比较用结论的一题,代码应该很简单,如果盲猜1的连续个数为p,然后加上p-1,最后输出,过了样例提交wa2。(应该再多造一两个样例,就知道这样思考的漏洞。比如111010000011,应该为4,而非3,那么原创 2020-10-28 09:47:27 · 479 阅读 · 0 评论 -
“kuangbin带你飞”专题计划——专题十六 KMP & 扩展KMP & Manacher
目录前言题目(kmp算法实际应该称为前缀函数算法)1. Number Sequence HDU - 1711 (KMP模板题:在另一个字符串中找一个字符串出现的位置)2. Oulipo HDU - 1686 (KMP模板题:求一个子串在另一个子串中出现的次数)3. 剪花布条 HDU - 2087 (KMP模板题:求另一个字符串中最多可以在剪出多少个该字符串)4. Cyclic Nacklace HDU - 3746 (前缀函数模板题:求字符串周期n-pi[n-1])5. Period HDU - 1358原创 2021-08-26 12:17:14 · 309 阅读 · 0 评论 -
Luogu P4051 [JSOI2007]字符加密 (后缀数组-寻找最小的循环移动位置)
题目链接:https://www.luogu.com.cn/problem/P4051题意:题解:s->ss之后就变成后缀数组的模板题了。举例,如果s="dbcb",那么b(dbc)<bcb(d)<cb(db)<dbcb。实际上:bcb(d)<b(dbc)<cb(db)<dbcb。加上s之后对这个结果没影响bcd(dbcb)<b(dbcb)<cb(db)<dbcb。(说明:只需要前面四个字母,如果不同直接判断了,如果相同那也没啥原创 2021-01-23 19:36:55 · 244 阅读 · 1 评论 -
luogu P4555 [国家集训队]最长双回文串(manacher,DP)
题目链接:https://www.luogu.com.cn/problem/P4555题意:题目描述顺序和逆序读起来完全一样的串叫做回文串。比如acbca是回文串,而abc不是(abc的顺序为abc,逆序为cba,不相同)。输入长度为n的串S,求S的最长双回文子串T,即可将T分为两部分X,Y,(∣X∣,∣Y∣≥1)且X和Y都是回文串。输入格式一行由小写英文字母组成的字符串SS。输出格式一行一个整数,表示最长双回文子串的长度。题解:我大意了,以为T也必须是回文,那么这题原创 2020-11-29 23:16:35 · 213 阅读 · 0 评论 -
luogu P3435 [POI2006]OKR-Periods of Words(kmp求字符串的最大周期,kmp,帮助理解kmp)
题目链接:https://www.luogu.com.cn/problem/P3435题意:简单的像个一一样,不知道这样的题怎么配坑我那么多时间(从昨天中午开始看,因为考试,大牛客比赛,晚上也没去看,今天早上看了一会,都有一点畏难了,这nm什么破题意)。(当然这题还是很好的,我是直接看的题解,因为这题意确实独步求懂。算是补偿我看了那么久吧,逞能一下口舌之能(狗头报命))。题意给定一个长度为n(n<=1e6)的字符串s。然后求所有前缀的最大周期的和,注意有以下限制1.周期不能为本身2.如原创 2020-11-23 13:47:10 · 146 阅读 · 0 评论 -
cf1450 C2. Errich-Tac-Toe (Hard Version)(数学,思维,字符串)
题目链接:https://codeforces.ml/contest/1450/problem/C2题意:给定一个长度为n(n<=300)的字符正方形,'.' , 'X' , 'O'。'X'可以与'O'互换,cnt为'X'与'O'的个数和,请改变x个不为 '.' 的保证字符,其中x<=cnt/3下取整,使不出现任意三个连续的字符为'O'或’X'。保证一定存在这样的操作。题解:分别统计t=(i+j)%3的位置的‘X',与'O'数。x0,x1,x2,o1,o2,o3分别对应t值'X'或'O'原创 2020-12-11 21:16:52 · 201 阅读 · 0 评论 -
luogu P5685 [JSOI2013]快乐的 JYY(PAM,dfs,每种回文出现次数)
题目链接:https://www.luogu.com.cn/problem/P5685题意:给定两个长度均<=5e4的字符串。问两个字符串中有多少对相等的回文串。题解:num统计每个字符串中每一种回文子串的个数(PAM可以解决的问题)。然后再dfs(dfs我想的太难了,只需要dfs(1,1),dfs(0,0)。void dfs(x,y)如果x>1&&y>1就相乘。而且两颗树中有相同回文串的时候才递归)。代码:#include <bits/stdc++原创 2020-12-06 15:03:29 · 172 阅读 · 0 评论 -
Luogu P4551 最长异或路径 (字符串,01Trie)
题目链接:https://www.luogu.com.cn/problem/P4551题意:给定n个点(1<=n<=1e5),n-1条带权无向边 u,v,w。求最大的异或路径,即所有最短路径中的异或和的最大值。题解:01Trie模板题1.求num[i]:首先在原树上随便选择一个点作为根节点s,然后num[i]表示表示根节点到点i的路径异或和,那么任意两点j,k之间的路径异或和为num[j]^num[k]。2.利用num[i]建立二进制Trie树:优化空间,空间复杂度降到大概O(n原创 2021-01-20 20:25:30 · 181 阅读 · 1 评论 -
Luogu P5357 【模板】AC自动机 (fail树dfs)
题目链接:https://www.luogu.com.cn/problem/P5357题意:给定n个s串(1<=n<=2e5,s总长度<=2e5),一个t串(长度<=2e6)。问每个s串在t中出现的次数。注意不保证每个s串都不相同。总结:1.AC自动机很好用,多模式串匹配,当然但模式串匹配自然也是可以用的。1)AC_automaton=trie+kmp2)理解的关键在于fail指针3)使用的关键在query那个while(t) t=fail[t]。//可能卡a原创 2021-01-20 16:30:42 · 168 阅读 · 0 评论 -
C. K-beautiful Strings(字符串+贪心+暴力)
题目链接:https://codeforces.ml/contest/1493/standings/friends/true题解:参考issue敲腻害我的困惑:sum>i时怎么处理。解决方法,取a[i]本身肯定不行,就枚举a[i]+1~26,第一个字母大就一定满足(前提是能配齐),配不够的全换成a即可。玛德。真的会有那么一道题,让你不想搞acm。我能做的,保持好心态即可。总结:(1)几乎每道题的解法思路,一定是超级简单易懂的。如果自己都不确定自己能否实现自己的想法,那就及时改变翻译 2021-03-08 18:11:17 · 336 阅读 · 0 评论 -
cf1200 E. Compress Words(kmp,句子压缩模板题)
题目链接:https://codeforces.ml/contest/1200/problem/E题意:给定一些单词,总长度不超过1e6。如果后缀与前缀匹配就只需要保留一个,例如,input:::5sample please ease in outoutpur:::sampleaseinout题解:直接暴力过了12个点。思考kmp怎么做,很明显的kmp,只要方法是正确的,就一定能找到答案。如please-ease.只需要求出ease#ease(如果ans长度小于s即"ease"的原创 2020-11-21 15:06:42 · 270 阅读 · 0 评论 -
codeforces-1504-C. Balance the Bits
传送门题意:给定一个长度为n(n为偶数,而且<=2e5)的01串a,问是否能找到两组长度为n的括号串s1,s2,满足以下两个条件:1)括号平衡(比如:"(())(()())",比如"())("是不平衡的)。2)a[i]==1时s1[i]==s2[i],a[i]==0时s1[i]!=s2[i]。题解:其实我们很了解平衡扩号串了,他有几个重要的性质:1)'(',')'的数目各占一半。2)任意前缀,')'的数目不能大于'('3)满足以上两个条件,一定满足平衡括号串(即充要条件)。原创 2021-04-04 09:50:24 · 389 阅读 · 0 评论 -
cf1509 D. Binary Literature
传送门题意:给定三个长度为2*n(1<=n<=1e5)的01串,然后找到一个长度最大为3*n的01串,满足至少有两个给定的2*n串为它的子序列。题解:很明显,这三个字符串中一定至少有两个字符串中s的个数>=n。1) 找到s为‘0’还是'1’。2) 然后找到这两个字符串的下标x,y。3) 最后将这两个下标从1~2*n对应,如果c[x][i]==c[y][i]答案只加入一个字符,否则就按顺序加入c[x][i]与c[y][i]。然后一下子答案就出来了,是不是很..原创 2021-04-17 10:31:58 · 132 阅读 · 0 评论 -
luogu P1098 字符串的展开
链接:https://www.luogu.com.cn/problem/P1098题意,给一个字符串,由小写字母,数字以及'-'组成。当遇到如a-f时需要将a-f按abcdef输出。题解:只需要讨论是s[i]=='-'的时候,其他时候直接输出s[i]即可。小技巧:1.判断是否是字母,数字这种操作,可以写一个函数,让代码更整洁。2.调试用脑子而不是用编译器3.这种题目今后遇到应该需要很快做出来。代码:#include <bits/stdc++.h>#defin原创 2020-10-14 21:14:38 · 80 阅读 · 0 评论 -
codeforces 1430D. String Deletion(贪心)
题目链接:https://codeforces.ml/contest/1430/problem/D题意:T组样例。每组样例一个n,一个长度为n的01串。问可以进行多少次以下操作(必须按顺序):1.选择一个字符从字符串中删除2.删除最长相同字符前缀,如1110010->0010题解:b[i]存储第i个连续相同字符串的长度,如例2中3,2,1,1。首次删除一定会删除前面相同的所有字符串,然后之后每次,最优的选择时删除两个字符(1,2步骤均删除一个)。如果b[i]很大,当然优先取,取原创 2020-10-17 19:12:10 · 235 阅读 · 0 评论 -
luogu P4287 [SHOI2011]双倍回文(PAM回文自动机,trans指针,倍增优化)
题目链接:https://www.luogu.com.cn/problem/P4287题意:给定一个长为n(n<=5e5)的字符串,问最长的满足AA'AA'的子串长度。A'为A的反转串如abb->bba如:16 ggabaabaabaaball答案:12题解:回文自动机记录fail以及len。然后再len[i]%4==0时找#include <bits/stdc++.h>#define ll int#define ld double#define p..原创 2020-12-06 10:01:00 · 159 阅读 · 0 评论 -
uva11022 String Factoring(kmp,区间dp)
题目链接:https://www.luogu.com.cn/problem/UVA11022题意:给定一个字符串s,长度<=80。可以合并ABABAB->(AB)^3。=2ABB->A(B)^2。=2ABBABB->(ABB)^2->(A(B)^2)^2。=2问最后最少可以由多少个字母表示。题解:区间dp。f[l][r]表示区间l,r的最小值。f[l][r]=min{f[l][i],f[i+1][r]}。kmp求l,r的周期,用于更新f[l]原创 2020-11-21 14:14:16 · 175 阅读 · 0 评论 -
codeforces 1428C. ABBB(字符串,思维,贪心)
题目链接:https://codeforces.ml/contest/1428/problem/C题意:T个字符串,每个字符串只含AB。每次可以删取连续的AB or BB.问最后最少剩多少个字符。题解:冷静啊!!!!每次遇到A选最近的一个B(很像昨天做的一个贪心题)。#include <bits/stdc++.h>#define ll long long#define pi acos(-1)#define pb push_back#define mst(a, i)原创 2020-10-18 08:45:05 · 655 阅读 · 0 评论 -
Luogu P6216 回文匹配(kmp,manacher,统计)
题目链接:https://www.luogu.com.cn/problem/P6216题意:题目描述对于一对字符串s1,s2,若s1的长度为奇数的子串(l,r),满足(l,r)是回文的,那么 s1 的“分数”会增加s2在(l,r)中出现的次数。现在给出一对(s1,s2),请计算出s1的“分数”。答案对2^32取模。其中1<=|s2|<=|s1|<=3e6。输入格式第一行两个整数,n,m,表示s1的长度和s2...原创 2020-11-29 19:46:57 · 263 阅读 · 0 评论 -
字符串学习&总结(感觉主要是总结模板)
目录前言字符串hash(hash yyds)导读HASH模板(哈希&双哈希)hash应用(hash牛逼克拉斯):::::::::::::::0. 核心操作:求子串哈希值1. 字符串匹配2. 允许k次失配的字符串匹配3. 最长回文子串(hash操作简单,可解决的问题有点多啊!!!nice)4. 最长公共子字符串(m个总长不超过n的非空字符串的最长公共子串)5. 确定字符串中不同子字符串的数量hash实战题目1:E. Compress Words(合并字符串&合并的时候前后缀去重)前言大二原创 2021-08-25 11:42:22 · 1376 阅读 · 0 评论