后缀数组&manachar总结
洛谷题单
后缀数组
前置芝士
例题略解
P2463 [SDOI2008]Sandy的卡片
板子题。。。
然而我还是不会。
大概做法就是先把所有的串差分后拼成一个大的串,小的串之间用一个极大数(比差分数组中最大的数大就可以)隔开。
并且确保每个用于隔开小串的数大小不同,每隔开一个\(+1\)就可以了。
然后进行二分答案就\(OK\)了
P2336 [SCOI2012]喵星球上的点名
SA+莫队
大概就是像上一个题一样,将所有的名字建成一个大串,记录一下所在名字,
然后对于每个询问预处理一下在SA数组左右的端点
之后的做法和莫队就是标准的莫队了。。。
P4094 [HEOI2016/TJOI2016]字符串
正解:主席树+SA+二分+RMQ
但是暴力做法远快于正解,而且码量思路也比较好想
还是那个推论2,对于以a到b开始的每个后缀都求一下,
然后在把推算结果与d-c+1取最小值。
- 对于a到b中rk小于rk[c]的:
从rk[c]开始,到height[i]小于ans就停止,如果i大于sa[a]小于sa[b]更新就好了 - 对于a到b中rk等于rk[c]的:
特判一下 - 对于a到b中rk大于rk[c]的:
把小于rk[c]的操作从rk[c]+1到n进行一边就好了
P4248 [AHOI2013]差异
单调栈+SA求LCP
比较易懂,大概就是先把题面上的式子简化一下,
变成某个带n的代数式加上LCP
\(∀1\leq i<j\leq n,\) \(LCP(sa_i,sa_j)=\min\limits_{i< k\leq j} (height_k)\)
然后运用LCP的推论2,将问题转化成了求每个子区间的最小值的加和
可以打权值线段树,但是太麻烦了,于是可以用单调栈来优化
- 注意:
在求SA时M所赋的初值应大于原序列中的最大值
BZOJ3230
SA+RMQ(ST表)+二分
每个字串都是一个后缀的前缀,先求一下SA以及LCP,
然后就可以预处理出每个后缀的左右边界值
在处理询问的时候进行二分,查看要查询的字串的左右端点在哪两个后缀中,
最后算一下就好了
- 注意:
对于每一个操作都要搞正反两遍
P2178 [NOI2015] 品酒大会
常规做法是并查集+SA(+set)
但是zxb用三棵线段树硬是给干过去了,做法么,和差异这个题差不多,tql%%%
用RMQ暴力有两种打法:
- 最简单的也是得分最低的:
每种情况都枚举一遍 - 优化的暴力:对于不同的LCP都更新,然后累加
正解就是对于第二种暴力放弃RMQ,改用并查集维护,处理一个siz值,对于不同的点进行合并,这里用set维护了一下并查集
- 注意:因为有负值,因此们要求max(最大值 * 次大值,最小值 * 次小值)
\(manacher\)
前置芝士
例题略解
P4287 [SHOI2011]双倍回文
半个板子题,有一个很妙的思路,在处理manacher的时候整一下,对于i=1的情况,循环一下i+p[i],如果j-i长度为4的倍数,更新答案。
毕竟,双倍的回文串还要计算上在每一位之间插进去的字符。
荣登最优解\(Top3\)
- 注意:i&3表示 \(i\mod4\) ,同样的,i&7可以表示\(i\mod8\)
P4555 [国家集训队]最长双回文串
我真傻,真的,我单知道输入字符串从0开始,却不知道求manachar时也要从0开始处理
和上一题差不多,都是在manachar函数里搞事情
开一个l和r数组用来表示以i为分割点的所谓双回文串的左右端点,理论上来讲,l在最后取max时应该从n到2,r应该从2到n,防止更改过的对以后的有影响。但是数据他水呀
最后取一下\(l[i]+r[i]\)的最值就ok了
P3501 [POI2010]ANT-Antisymmetry
SP15569 STC02 - Antisymmetry
还是在manachar的板子上进行修改。
观察题面,无非就是要求我们求异或意义下的回文串
因为题面的意思是要求我们1与0相对,而不是1与1相对,在函数里循环的时候两个两个的枚举防止#与#判等的情况,相对关系用一个to数组存就好了。
在一个长度为\(L\)的异或回文串里共有\(\frac L2\)个异或回文串,直接加起来就好了。
P2601 [ZJOI2009]对称的正方形
正解和暴力都想了挺长时间,尤其是暴力\(code\)
用了离散化,regster int,inline来优化。
对于正解,就是对于整个方块横着竖着各扫一边,统计出横纵最长回文串的长度,在运算的时候可以用单调队列优化。
后缀数组&manachar总结的更多相关文章
- 后缀数组的倍增算法(Prefix Doubling)
后缀数组的倍增算法(Prefix Doubling) 文本内容除特殊注明外,均在知识共享署名-非商业性使用-相同方式共享 3.0协议下提供,附加条款亦可能应用. 最近在自学习BWT算法(Burrows ...
- BZOJ 4199: [Noi2015]品酒大会 [后缀数组 带权并查集]
4199: [Noi2015]品酒大会 UOJ:http://uoj.ac/problem/131 一年一度的“幻影阁夏日品酒大会”隆重开幕了.大会包含品尝和趣味挑战两个环节,分别向优胜者颁发“首席品 ...
- BZOJ 1692: [Usaco2007 Dec]队列变换 [后缀数组 贪心]
1692: [Usaco2007 Dec]队列变换 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 1383 Solved: 582[Submit][St ...
- POJ3693 Maximum repetition substring [后缀数组 ST表]
Maximum repetition substring Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 9458 Acc ...
- POJ1743 Musical Theme [后缀数组]
Musical Theme Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 27539 Accepted: 9290 De ...
- 后缀数组(suffix array)详解
写在前面 在字符串处理当中,后缀树和后缀数组都是非常有力的工具. 其中后缀树大家了解得比较多,关于后缀数组则很少见于国内的资料. 其实后缀数组是后缀树的一个非常精巧的替代品,它比后缀树容易编程实现, ...
- 【UOJ #35】后缀排序 后缀数组模板
http://uoj.ac/problem/35 以前做后缀数组的题直接粘模板...现在重新写一下模板 注意用来基数排序的数组一定要开到N. #include<cstdio> #inclu ...
- 【BZOJ-2119】股市的预测 后缀数组
2119: 股市的预测 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 334 Solved: 154[Submit][Status][Discuss ...
- 【BZOJ-4698】Sandy的卡片 后缀数组
4698: Sdoi2008 Sandy的卡片 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 140 Solved: 55[Submit][Stat ...
随机推荐
- 四、postman关联、参数化
一.postman关联 在实际接口测试中,后一个接口要用到前面接口返回的结果,从而让后面的接口能够正常运行,这个过程的实现成为关联 如上图通过新版本或者老版本的语法把获取的变量access_token ...
- Android学习之TTS踩坑笔记
•前言 最近在做一款英文词典的 APP,做到语音模块的时候,我裂开,从网上搜索了各种博客,各种瞎捣鼓,模拟器就是不发音: 辗转反侧数日,终于让我找到解决之法,接下来就本次测试列出一些需要(必须)解决的 ...
- 用Taro写一个微信小程序(二)——配置目录别名
配置别名可以方便书写代码引用路径,让代码更整洁. 官方文档可参考https://nervjs.github.io/taro/docs/config-detail#alias 一.在config/ind ...
- 一种巧妙的使用 CSS 制作波浪效果的思路
在之前,我介绍过几种使用纯 CSS 实现波浪效果的方式,关于它们有两篇相关的文章: 纯 CSS 实现波浪效果! 巧用 CSS 实现酷炫的充电动画 本文将会再介绍另外一种使用 CSS 实现的波浪效果,思 ...
- react+antd 使用脚手架动态修改主题色
最近做了一个需求,后台管理系统添加一个可以动态修改ant-design主题色.查询了大多数的文章,发现基本都是抄来抄去,而且文章记录的也一点也不详细.刚刚把这个功能做完了,顺便记录一下如何去修改主题色 ...
- C++ primer plus读书笔记——第8章 函数探幽
第8章 函数探幽 1. 对于内联函数,编译器将使用相应的函数代码替换函数调用,程序无需跳到一个位置执行代码,再调回来.因此,内联函数的运行速度比常规函数稍快,但代价是需要占用更多内存. 2. 要使用内 ...
- Django 请求和响应 request return
request.method 请求方法 request.get get请求信息 request.post post请求信息 request.path 请求路径 方法: requset.get_fu ...
- 从零搭建springboot服务01-初始搭建、内嵌swagger
愿历尽千帆,归来仍是少年 1.基础springBoot框架 编辑工具:IDEA.jdk1.8.tomcat8.maven3.3.9 编码格式:UTF-8 参考文献:https://www.cnblog ...
- Ansible_描述角色结构
一.利用角色构造ansible playbook 1.What's 角色 1️⃣:Ansible角色提供了一种方法,让用户能以通用的方式更加轻松地重复利用Ansible代码. 我们可以在标准化目录结构 ...
- 云计算OpenStack---创建实例(11)
创建实例时,需要先创建网络及实例类型等其它配置: 一.创建虚拟网络(Self-service network) 网络概述图: 网络连接图: 1.创建self-service网络 (1)加载系统变量: ...