当前位置: 首页 > web >正文

SAM详解3.2(关于2和3的题)

SAM

  • SAM
    • luogu6640
      • 分析
      • 优化
    • CF653F
      • 分析
      • 维护

SAM

推销一波前面的文章:

SAM详解1

SAM详解2(初级应用)

SAM详解3(SAM与AC自动机的相似性,SAM处理字符串匹配)

luogu6640

题目链接

给出只包含小写字母 ab 的两个字符串 s , t s,t s,t q q q 次询问,每次询问 s [ l … r ] s[l…r] s[lr] t t t 的最长公共子串长度。

分析

看到最长公共子串,建出 t t t 的 SAM,然后让 s s s 在上面跑匹配,记跑出来的数组是 s l e n slen slen

然后可以看出答案:

a n s = max ⁡ i = l r min ⁡ ( i − l + 1 , s l e n [ i ] ) ans=\max_{i=l}^r\min(i-l+1,slen[i]) ans=i=lmaxrmin(il+1,slen[i])

于是有了暴力 O ( q n ) O(qn) O(qn) 的做法。

优化

发现括号内的 min ⁡ \min min 不好维护,考虑拆括号。

i − l + 1 < s l e n [ i ] i-l+1<slen[i] il+1<slen[i] 时,有 i − s l e n [ i ] + 1 < l i-slen[i]+1<l islen[i]+1<l

然后有个性质 i − s l e n [ i ] + 1 i-slen[i]+1 islen[i]+1 单调不降。

证明:

回顾 s l e n slen slen 的计算过程:

	for(int i=1,p=1,L=0;i<=n;i++){while(p&&!a[p].ch[s1[i]-'a']){p=a[p].f;L=a[p].len;}if(!p)p=1;elsep=a[p].ch[s1[i]-'a'],L++;slen[i]=L;}

L L L 每次最多增加 1 1 1,或者减少。

i i i 每次稳定增加 1 1 1

得证。

于是可以用二分求出一个

http://www.xdnf.cn/news/5353.html

相关文章:

  • 从客厅到星空 | 解锁雷克赛恩 Cyber Pro1 投影仪的多元场景应用与选购指南
  • Baklib革新企业数字化内容管理
  • idea批量引入缺失的和去除无用的类包
  • cmake source_group 分组功能辅助函数
  • 焊接与热切割作业理论考试难度分析
  • 未来通信中的大型人工智能模型:基础、应用与挑战的全面综述
  • 《P2415 集合求和》
  • Windows 操作系统 - BAT 脚本引入(BAT 脚本初识、窗口标题与颜色、输出文本)
  • 历史数据分析——北部湾港
  • 洗衣机电机驱动电路
  • M0基础篇之ADC
  • 【llama-factory】Lora微调和DPO训练
  • 论文分享➲ arXiv2025 | TTRL: Test-Time Reinforcement Learning
  • JavaSE核心知识点02面向对象编程02-06(泛型)
  • 多环境开发
  • Makefile中 链接库,同一个库的静态库与动态库都链接了,生效的是哪个库
  • 【RT-Thread Studio】W25Q128配置
  • unity通过transform找子物体只能找子级
  • OpenAI 结构改革:迈向民主化 AI 的新篇章
  • TCP的连接管理
  • lnx 0-1 积分
  • 多个python环境下,pip安装无法成功解决方案
  • 《P7167 [eJOI 2020] Fountain (Day1)》
  • 线程互斥与线程同步
  • HTML入门教学
  • 不同类型的 SAP 项目
  • 零件画图实战提升案例(下)
  • 7系列 之 I/O标准和终端技术
  • 2.商户查询缓存
  • 时钟晶振锁相环pll方向技术要点和大厂题目解析