SAM练习记录

洛谷 P1368 工艺

其实是最小表示法裸题

倍长后建SAM跑最小的边走|S|步即可

Code


CF 235 C. Cyclical Quest

对主串建SAM

然后每个串倍长,跑的时候维护一下匹配长度再更新答案,还有判断一个节点是否重复到达。

Code


BZOJ1396: 识别子串

一开始写这个题的时候固执的认为是线段树合并..

显然出现次数为1的串的rigit集合大小为1,我们直接处理一下就好了,设Ta和Ta父亲的长度是\(len_x\)和\(len_p\)

那么在区间\([len_x-len_p,len_x]\)的都可以取\(len_p+1\),而在\([1,len_x-len_p+1]\)的都可以取\(len_x+1-i\)

分开放到两个线段树维护一下就可以了,也可以离线\(O(n)\)做

Code


BZOJ2555: SubString

lct维护SAM裸题

动态维护par树并且维护一下子树大小就可以了

注意维护子树大小时link的时候x,y都要保证fa是0,wa了好久

Code


「TJOI / HEOI2016」字符串

注意读题,一个是子串一个没有子串...

sam可以求最长公共后缀,所以先把串反过来。

考虑二分答案,每次从\(d\)在SAM上的那个点倍增向上跳,找到最短的那个大于当前答案的点,查询它的rigit集合是否在\([a+mid-1,b]\)区间,可以用线段树合并(可持久化线段树?)维护

Code


「NOI2018」你的名字

68分:考虑统计两个串的本质不同公共子串个数。

方法:对S,T同时建SAM,然后在S的SAM上跑T这个串,可以得到T的每个\(i\)为末尾的串的在S中的匹配长度,然后把这个长度表示打到T的对应节点上面去,最后对T的par树跑一遍传一传标记。

Code:

100分:其实和68差不多

对S的SAM用线段树合并之类的维护一下right集合,然后每次还是跑匹配,并把标记打到T上去。

考虑到维护匹配长度,显然par树越上,right集合越大,我们可以查询right集合在不在区间里面。于是考虑二分一个匹配长度,然后倍增跳到对应节点,再线段树检测一下合不合法。

但仔细想一想这个过程,发现是可以直接暴力跳par树的,因为我们得满足势能嘛,就变成一个\(\log\)的了

跳的时候注意一下细节,我看大家写的都不咋一样,就不具体说了。

Code

SAM练习记录的更多相关文章

  1. 【算法】后缀自动机(SAM) 例题

    算法介绍见:http://www.cnblogs.com/Sakits/p/8232402.html 广义SAM资料:https://www.cnblogs.com/phile/p/4511571.h ...

  2. 【转】如何打开注册表编辑器中存储用户信息的SAM文件?

    sam文件怎么打开 (Security Accounts Manager安全帐户管理器)负责SAM数据库的控制和维护.SAM数据库位于注册表HKLM\SAM\SAM下,受到ACL保护,可以使用rege ...

  3. Codeforces 666E Forensic Examination SAM or SA+线段树合并

    E. Forensic Examination http://codeforces.com/problemset/problem/666/E 题目大意:给模式串S以及m个特殊串,q个询问,询问S的子串 ...

  4. 一步步学习 Spring Data 系列之JPA(二)

    继上一篇文章对Spring Data JPA更深( )一步剖析. 上一篇只是简单的介绍了Spring Data JPA的简单使用,而往往在项目中这一点功能并不能满足我们的需求.这是当然的,在业务中查询 ...

  5. Javascript - ExtJs - 数据

    数据(ExtJs Data) Ext.data命名空间 有关数据存储.读取的类都定义在Ext.data命名空间中.Ext的gridPanel.combobox的数据源都是来自Ext.data提供的类. ...

  6. Bzoj2780: [Spoj]8093 Sevenk Love Oimaster

    题目 传送门 Sol 就是广义\(sam\) 然后记录下每个状态属于哪些串,开\(set\)维护 \(parent\)树上启发式合并一下就好了 # include <bits/stdc++.h& ...

  7. bzoj题目分类

    转载于http://blog.csdn.net/creationaugust/article/details/513876231000:A+B 1001:平面图最小割,转对偶图最短路 1002:矩阵树 ...

  8. 【XSY2384】【GDOI2017】微信

    致去年的我:这是道广义SAM模板题啊…… 题意: Description Input Output HINT $1\leq N\leq 20$,$1\leq Q\leq 10^5$,字符串总长$\le ...

  9. 【spoj2774】最长公共子串

    题目描述: 给你两个字符串,求它们最长公共子串的长度,如果不存在公共子串则输出0. 样例输入: yeshowmuchiloveyoumydearmotherreallyicannotbelieveit ...

随机推荐

  1. linux系统下MySQL表名区分大小写问题

    linux系统下MySQL表名区分大小写问题 https://www.cnblogs.com/jun1019/p/7073227.html [mysqld] lower_case_table_name ...

  2. vue router 根据不同的id切换链接界面不刷新

    我们一般使用vue的router时候会根据不同的id来切换界面,但是界面没有立刻刷新.下面我们讲下如何解决这个问题. html: <template> <div id="a ...

  3. oracle创建视图时一些问题

    这几天创建视图的时候,遇见的问题. 一:创建视图的时候Oracle-报错:文字与格式字符串不匹配(ORA-01861) 我创建的时候用的 是to_date 然后我改成了to_char select X ...

  4. K8S集群 NOT READY的解决办法 1.13 错误信息:cni config uninitialized

    今天给同事 一个k8s 集群 出现not ready了 花了 40min 才搞定 这里记录一下 避免下载 再遇到了 不清楚. 错误现象:untime network not ready: Networ ...

  5. [转帖]TLS 1.3 VS TLS 1.2,让你明白 TLS 1.3 的强大

    TLS 1.3 VS TLS 1.2,让你明白 TLS 1.3 的强大 https://www.jianshu.com/p/efe44d4a7501?utm_source=oschina-app 又拍 ...

  6. Mybatis测试用例

    package cn.zhangxueliang.mybatis.mapper; import static org.junit.Assert.*; import java.io.InputStrea ...

  7. 【gedit】 显示行号

    打开gedit文本编辑器->Edit(编辑)->preferences(预设)->view(视图)->在Display line numbers前打勾->close

  8. 【转】MySQL sql_mode 说明(及处理一起 sql_mode 引发的问题)

    1. MySQL 莫名变成了 Strict SQL Mode 最近测试组那边反应数据库部分写入失败,app层提示是插入成功,但表里面里面没有产生数据,而两个写入操作的另外一个表有数据.因为 inser ...

  9. Lodop打印控件 超文本自动分页

    Lodop打印控件打印html超文本,通常传入一个超文本内容可能会超过纸张,如果要拆分每页显示哪些然后手动分页比较麻烦,Lodop中的超文本都有自动分页的特点.自动分页的依据:1.超文本超过设置的打印 ...

  10. 三星 SCX-4521NS 网络打印机 在XP 下 强行 设置 安装

    添加打印机加上之后,图标是半虚的,状态脱机,网上找了很多方法都不好使. 包括官方的:http://www.samsung.com/cn/support/skp/faq/442292 然后死马当活马医, ...