字符串
那页
这个作者很懒,什么都没留下…
展开
-
2021 ICPC沈阳 M -- String Problem
有个SAM的经典模板题,找第k下子串,这里就是最大串,其实可以类比。因为是最大串,我们可以直接从根往最大的节点去找,每次都这样向下dfs,随之串长增大,那么我们就可以得到最大字符位置及后面所有位置上的最大子串位置。同理,对于最大字符之前的一个字符位置到上次我们找到的最大字符位置,我们知道在不到上一个最大字符与次大字符之间的整个串都是某个前缀串的最大子串。我们可以通过fail树得到次大能匹配到的字符位置。复杂度O(n)。//// Created by acer on 2021/2/16.////判原创 2021-11-25 14:00:32 · 1264 阅读 · 0 评论 -
NC19822 我不爱她 kmp+hash
链接:https://ac.nowcoder.com/acm/problem/19822来源:牛客网题目描述终于活成了自己讨厌的样子。天空仍灿烂,它爱着大海。你喜欢大海,我爱过你。世界上充满了巧合。我们把每句话当成一个字符串,我们定义a对b的巧合值为a的最长后缀的长度并且它是恰好是b的前缀,这里的后缀或者前缀包括字符串的本身。比如字符串“天空仍灿烂她喜欢大海”对“她喜欢大海我不爱她了我爱的只是与她初见时蔚蓝的天空”的巧合值为5,而字符串“她喜欢大海我不爱她了我爱的只是与她初见时蔚蓝的天空”对“原创 2021-08-13 15:50:28 · 132 阅读 · 0 评论 -
Display Substring -hdu6988 2021杭电多校 -SAM+二分
题目需要求第k小价值的子串价值,和一个经典题型很相似,所以应该能想到用SAM/SA做。所以我们需要二分找有几个串价值比当前价值小,这个过程使用二分答案,套一个SAM,在SAM内遍历所有点,因为子串长度和价值是成正比的,所以在每个点上二分长度,统计一共有几个子串然后与k比较。//// Created by acer on 2021/2/16.////判断子串,不同子串个数,所有子串字典序第i大,最长公共子串#include "bits/stdc++.h"#define mem(x, i) m原创 2021-07-31 11:30:20 · 157 阅读 · 0 评论 -
P4070 [SDOI2016]生成魔咒 - SAM
这是一道板子题,考的是一个状态中不同子串数量为len[i] - len[fa[i]],即集合中最长的后缀减去最短的后缀。不过这题我遇到的问题在于字符集过于庞大,最后是通过用map去代替ch数组解决。//// Created by acer on 2021/2/16.////判断子串,不同子串个数,所有子串字典序第i大,最长公共子串#include "bits/stdc++.h"#define int long longusing namespace std;const int MAXN原创 2021-07-29 20:24:58 · 87 阅读 · 0 评论 -
P3975 [TJOI2015]弦论 - 后缀自动机(SAM)
这是一道板子题的改编,意在加深对求第k小子串的理解。首先先看一下最简单的SAM板子。相信应该都写过了才会写这题//// Created by acer on 2021/2/16.////判断子串,不同子串个数,所有子串字典序第i大,最长公共子串#include <cstring>#include <iostream>#include "string"#define mem(x, i) memset(x,i,sizeof(x))using namespace s原创 2021-07-29 19:12:04 · 127 阅读 · 0 评论 -
回文字D 哈希/(贪心?)
传送门O(1)求是否是回文:正反一次哈希,看看正反值是不是相同即可。这题就可以判断会问然后往后推,若不是就取掉m-1个,否则继续推。保证是最优的解。还有一种贪心也是可行的,我的第一种想法就是贪心。因为取到的字符串每次只有三种情况1,len = m-1非回文 ,2, len = m 回文,3,len > m且字符串为aaaaaa或abababab形式。最后我写的是哈希的版本#include<bits/stdc++.h>using namespace std;#define i原创 2021-05-12 16:33:57 · 110 阅读 · 0 评论