随笔分类 - 字符串 - 字典树/Hash/KMP
摘要:线段树加 hash 判重模板题. hash 的话必须要用双 base 哈希,否则会 WA. 然后这道题中最好不要用自然溢出,感觉比取模还要慢一些. 由于读入量巨大,必须要开读入优化才能过. 哈希的方式就是对于每个数维护 $\sum base^{num[i]}$,由于值域不大,提前预处理出来 base
阅读全文
摘要:正常来说,单次操作的复杂度是 $O(k^2)$,然后整体复杂度是 $O(nk^2)$. 但是我们发现每次合并两个蚯蚓的复杂度的极限是 $O( min(size_{min},50) \times 50)$. 然后根据启发式合并的复杂度分析,即使要求遍历完 $size_{min}$,复杂度最高也就是 $
阅读全文
摘要:嘴巴上把这道题切了,但是写代码的时候好多细节都需要注意. 1. 大概可以猜到能表示出的数字比多,但是这一步要用 BFS+hash 才行,因为用 DP 求解的话会有好多无用状态. 2. 做动态规划的时候如果对与状态有限制条件的话比较好写的方法是由合法状态去转移下一步,而不是枚举当前状态去找上一步的状态
阅读全文
摘要:这道题是 KMP 来转移子串中的相对排名. 然后查询排名的话需要用到树状数组. 如果跳 fail 指针的话要把没用元素全部删掉. code: #include <bits/stdc++.h> #define N 1005000 #define setI(s) freopen(s".in","r",s
阅读全文
摘要:KMP 的 fail 指针指向的位置是具有循环节性质的. code: #include <bits/stdc++.h> #define ll long long #define N 1000020 #define setIO(s) freopen(s".in","r",stdin) using na
阅读全文
摘要:暴力的做法是求出 $next$ 数组后倍增求解答案. 但实际上不用这么麻烦,再做一次类似于 KMP 的东西就可以了. code: #include <bits/stdc++.h> #define N 1000006 #define ll long long #define setI(s) freop
阅读全文
摘要:新学一发扩展 KMP. 和 KMP 一样,都是均摊复杂度 $O(n)$. code: #include <bits/stdc++.h> #define N 20000007 #define ll long long #define setI(s) freopen(s".in","r",stdin)
阅读全文
摘要:用 trie 搜索一下就好了. code: #include <bits/stdc++.h> #define N 10008 #define setIO(s) freopen(s".in","r",stdin) using namespace std; char S[24]; int trie[N*
阅读全文
摘要:这个模型以前绝对见过,模拟赛的时候开始敲了一个AC自动机,纯属脑抽~ code:
阅读全文
摘要:Description 阿狸喜欢收藏各种稀奇古怪的东西,最近他淘到一台老式的打字机。打字机上只有28个按键,分别印有26个小写英文字母和'B'、'P'两个字母。经阿狸研究发现,这个打字机是这样工作的:l 输入小写字母,打字机的一个凹槽中会加入这个字母(这个字母加在凹槽的最后)。l 按一下印有'B'的
阅读全文
摘要:长度小于 10 是关键信息~
阅读全文
摘要:Description Bessie has been playing with strings again. She found that by changing the order of the alphabet she could make some strings come before a
阅读全文
摘要:Code:
阅读全文
摘要:每个小单词的长度都是小于等于100的,这是个重要的突破口. Code:
阅读全文
摘要:题目描述: 现在,火星人定义了一个函数 LCQ(x, y)LCQ(x,y),表示:该字符串中第 xx 个字符开始的字串,与该字符串中第 yy 个字符开始的字串,两个字串的公共前缀的长度。比方说,LCQ(1, 7) = 5, LCQ(2, 10) = 1, LCQ(4, 7) = 0LCQ(1,7)=
阅读全文

浙公网安备 33010602011771号