随笔分类 -  字符串

摘要:题目 题解 题目给了很重要的性质,就是保证询问的[l,r]是合法括号串(没有的话可能要莫队+二分找?) 假设给出的s串是合法括号序,按照树转括号序的方法逆向转成树,用左括号下标作为树上点的标号 例如 ()(()()) ,则有root-1, root-3, 3-4, 3-6,方法是维护左括号的栈,加入 阅读全文
posted @ 2024-11-09 10:27 gmh77 阅读(6) 评论(0) 推荐(0) 编辑
摘要:最小表示法 O(n)找到字典序最小的循环串 做法 先把串复制一遍,维护指针ij表示**[0,max(i,j)-1]中除min(i,j)均不合法**,再维护匹配了k位 (此时min(i,j)不一定合法,但这样的话min(i,j)一定会跳到和另一个交换为止,则另一个会变为新的min,这样就合法了) 直接 阅读全文
posted @ 2021-02-04 15:09 gmh77 阅读(136) 评论(0) 推荐(0) 编辑
摘要:题目大意 题解 裸题 建SAM,在SAM上面数位dp维护位置和当前长度即可 注意要先枚举新加的数,然后统一跳fail直到可以往下接,否则时间不能保证 时间复杂度O(10*nd^2) code #include <bits/stdc++.h> #define fo(a,b,c) for (a=b; a 阅读全文
posted @ 2020-09-12 21:42 gmh77 阅读(203) 评论(0) 推荐(0) 编辑
摘要:题目大意 题解 不难但是因为字符串太菜所以想了很久 排行榜上跑得快的一些做法假了,不知道有没有更简单的做法 结论:存在一种最优序列,使得Si是Si-1的后缀,证明把任意一种最优的不断删掉末尾将其顶住 也可以同时满足开头但是不需要,这样可以写个O(n^2)KMP暴力来拍 把SAM建出来,同一个点上的串 阅读全文
posted @ 2020-09-08 20:40 gmh77 阅读(107) 评论(0) 推荐(0) 编辑
摘要:题目大意 给出一个串S,求将至多一个位置换成*后所有串的不同子串个数 |S|<=1e5 题解 比E阳间得多但是并不是很好写 开始想枚举开头然后考虑星号位置,然后发现不可做 换一种思路,从大到小枚举星号前面的长度,那么变成新的问题: 每次动态加入一个S的后缀,或者把两个后缀集合合并,不同集合的串一定不 阅读全文
posted @ 2020-08-08 21:18 gmh77 阅读(218) 评论(0) 推荐(0) 编辑
摘要:题目描述 题解 并没有注意到相邻串字母不同,x=1想到用辅助数组加速跳next 首先显然离线,对每一段末尾求next,next的定义修改为匹配到的位置一定所在串的末尾 第一段长度大于等于,其他段长度刚好等于,把每一段当作特殊字符来做kmp,在找的时候算答案,答案是若干等差数列之和 由于kmp时间均摊 阅读全文
posted @ 2020-07-11 18:19 gmh77 阅读(163) 评论(0) 推荐(0) 编辑
摘要:题目描述 n<=5e5,w<=1e18,T=5 题解 需要各种前置姿势的吼题 同余最短路 求形如aixi=A;(ai>=0,xN)的A的个数 做法是按找%min(a)变成min(a)*x+b来分类跑最短路,f[i]表示%min(a)=i的最小的b,最后直接统计 本题中可 阅读全文
posted @ 2020-07-04 18:08 gmh77 阅读(218) 评论(0) 推荐(0) 编辑
摘要:注意事项 初始有两个根01,分别对应奇偶,长度为0/-1,0的fail是1 如果跳到了1号点,那么新建的点的fail是0 种数=点数-1,某个串结尾的回文子串个数=fail链长度 扩展要考虑匹配以及边界 code 洛谷5496 #include <bits/stdc++.h> #define fo( 阅读全文
posted @ 2020-06-23 17:26 gmh77 阅读(129) 评论(0) 推荐(0) 编辑
该文被密码保护。
posted @ 2020-06-19 10:26 gmh77 阅读(3) 评论(0) 推荐(0) 编辑
该文被密码保护。
posted @ 2020-06-12 19:54 gmh77 阅读(12) 评论(0) 推荐(0) 编辑
该文被密码保护。
posted @ 2020-06-07 15:37 gmh77 阅读(21) 评论(0) 推荐(0) 编辑
该文被密码保护。
posted @ 2020-04-27 22:34 gmh77 阅读(67) 评论(0) 推荐(0) 编辑
摘要:题目描述 题解 答案=f[i],大于等于是因为可以通过删减变成f[i] 1 假设判断是O(log),这样做是log\^2 发现f[i+1] =f[i] 1,即至少为i删掉一个字符,因此有f[i]=|S|就是 还有这道题并不需要考虑一个节点对应的多个串之间的关系,因为丢进去的是整个后缀,是主链上的点上 阅读全文
posted @ 2020-04-13 16:10 gmh77 阅读(210) 评论(0) 推荐(0) 编辑
摘要:3828 给定n个点的坐标(0f[i+1]+2,那么把i时的B删掉头尾的长度必然 f[i+1] 从后往前枚举,每次从f[i+1]+2往下枚举f[i],hash判断 阅读全文
posted @ 2019-11-08 16:59 gmh77 阅读(269) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示