随笔分类 - 字符串
摘要:gate 需要用C语言实现读入一行含空格的字符串,又不想一个一个char读入? scanf在读入字符串时遇到指定字符结束: scanf("%[^\n]s", s); //遇到换行结束 scanf("%[^#,$,%]s", s); //遇到#或$或%结束 不写的话,就是默认遇到换行或空格结束 对于这
阅读全文
摘要:gate 求第$k$小子串。 可以用后缀自动机求解。 \(t=0\),不同位置的相同子串算作一个。设$cnt[i]$表示$i$的$endpos$集合大小,即结束位置为$i$的子串个数。因为相同子串只算一次,所以直接设所有点的$cnt=1$即可。 \(t=1\),不同位置的相同字串算作多个。这时正常维
阅读全文
摘要:感谢$ivorysi$学姐_(:з」∠)_ 作图工具:$Google$绘图 后缀自动机 ${\rm (Suffix\ Automaton,SAM)}$是一个用来匹配单模板串的所有子串的算法。 ${\rm SAM}$的空间复杂度、构造的时间复杂度都是$O(n)$的。 后缀自动机是一个${\rm DAG
阅读全文
摘要:gate 用时:60min,几乎全是照题解写的,所以没什么bug 题目大意: 给定一个$N\times M$的天空,$T$个$P*Q$的星座,求有几个星座在天空中出现。 星空由 \('\ *\ '\) 和 \('\ 0\ '\) 组成。 多组数据,$1 \le N, M \le 1000, 1 \l
阅读全文
摘要:gate 第一次在$Leetcode$做题... 对于每个哈希值建一个链表(链式前向星) 以插入为例,设值为$key$,$key$的哈希值为$x$ 检查$x$的链表中,是否存在值为$key$的。 若不存在,\(num[++cnt] = key\),连边$head[x]\rightarrow cnt$
阅读全文
摘要:gate 对于每一位$s[i]$ \(ans = (ans*base + (ull)s[i])\%mod + prime\) 建议数值 $base = 131\ prime = 233317\ mod1 = 19260817\ mod2 = 20031101$ 双哈希 #include<cstdio
阅读全文
摘要:gate 用时:反正挺久的 给定长度为$n$的字符串和整数$k$,问每个前缀能否拆成$ABABA$($B$可以为空,即$AAAAA$)($k+1$个$A$)的形式。 设$AB$为$S$,则$A$为$S$的前缀。 问题转化为拆成$SSSSA$或$SSSSS$ \(KMP\),通过$fail$数组可以求
阅读全文
摘要:gate 一年前做的. 求一个字符串由多少个循环节构成. KMP. 结论:若$n % (n-next[n]) \not= 0$则不是由循环节构成的. 否则,答案为$n/(n-next[n])$. code #include<cstdio> #include<iostream> #include<cm
阅读全文
摘要:gate 用时:正常的时间大概120min 这题spj...我能说我对着不存在的bug找了半天吗...我是傻逼(1/1) 因为要求神力值最大的字符串,不用求这个数值, 可以把每个值取$\log$, 把几何平均数转化为算数平均数。 \(\sqrt[n]{\prod a_i}=\frac{1}{n}\s
阅读全文
摘要:"$gate$" $\color{ A4A4A4}{谢谢好哥哥帮我写的markdown,哭了}$ $exkmp$,也称$z−algorithm$ 是用来求一个字符串的每个后缀与原串的LCP,即字符串中后缀=前缀的长度。 表示以第i位为开头的后缀与前缀相等的最大长度。 例如字符串 ,可求出它的z函数为
阅读全文
摘要:gate 好像没发过manacher的板子,反正有现成的 简单介绍一下: manacher是用来求回文串的算法,它最后可以得到一个数组r[i],表示以i为中心的最长回文串半径为r[i]。 但是,回文串可能会有abba、abcba两种形式,当长度为偶数时,不好确定中心点。 所以,在字符间加入特殊符号,
阅读全文
摘要:感谢jdr,ldl学长和yst$qwq$ 后缀数组,顾名思义,就是对于一个字符串的每一个后缀的数组。 比如对于字符串fatcat,其所有后缀如下: fatcat atcat tcat cat at t 其按照字典序排序结果如下: at atcat cat fatcat t tcat 一般来说,对于每
阅读全文
摘要:传送门 AC自动机(Aho-Corasick automaton)是一种优化的多模式串匹配的算法,它像是trie树和KMP的结合体。 这个算法分为三部分:建立trie树,求fail,匹配。 假设有cod,cos,ost,op几个单词。(这图画了好久好久好久) 在普通trie树的基础上,像kmp一样处
阅读全文
摘要:第一次写kmp是2月,写错但AC了...第二次是6月,才发现... 现在是8月,第三次 /cy 传送门 KMP (D.E.Knuth - J.H.Morris - V.R.Pratt) 也叫看…,是一种改进的字符串匹配算法,核心是在匹配失败后减少已经匹配过的部分重新匹配。 原理 KMP是通过一个f[
阅读全文
摘要:传送 Trie树就是字典树,前缀树...(无所谓啦 今天考试的时候想出来了trie树怎么写,的确是正解,然而那题爆零了(...) 还是找个trie树板子写一下吧 首先,结构体node,包括son[26]表示这个字母的编号,fin表示是否是一个单词的结尾。 插入新单词,设当前位字母为i,从根开始找,如
阅读全文