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

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

SAM

  • SAM
    • luogu5341
    • SP8222

SAM

推销一波前面的文章:

SAM详解1

SAM详解2(初级应用)

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

luogu5341

题目链接

精简题意:给你一个字符串和 k k k,求 出现了 k k k 次的子串的长度 的出现次数 的最大值。

我们可以用 SAM 建出 parent tree,然后一遍 dfs 求出每个位置的 s z sz sz,也就是 ∣ e d p ∣ |edp| edp

然后对于 s z sz sz k k k 的节点,用差分维护。

因为在前文中讲过:

在这里插入图片描述
在这里插入图片描述
当然,你想用线段树什么的也可以维护,只是数据范围是 3 × 1 0 6 3\times 10^6 3×106 的,带个 log ⁡ \log log 可能要卡常。

代码:

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+1;
int n,m,k;
string s;
int df[N];
struct SAM{int las,tn;int sz[N<<1];struct node{int ch[26],f,len;}a[N<<1];vector<int>E[N<<1];SAM(){ las=1,tn=1;}void cl(){for(int i=1;i<=tn;i++){E[i].clear(),sz[i]=0,a[i].f=a[i].len=0;for(int j=0;j<26;j++)a[i].ch[j]=0;}las=1,tn=1;}void addE(int x,int y){E[x].push_back(y);}void dfs(int u){for(int v:E[u]){dfs(v);sz[u]+=sz[v];}if(sz[u]==k)df[a[a[u].f].len+1]++,df[a[u].len+1]--;}void btr(){for(int i=2

相关文章:

  • Debezium RelationalSnapshotChangeEventSource详解
  • SCADA|KIO程序导出变量错误处理办法
  • 5.0.5 变换(旋转、缩放、扭曲)
  • 4.1【LLaMA-Factory 实战】医疗领域大模型:从数据到部署的全流程实践
  • 谷云科技iPaaS发布 MCP Server加速业务系统API 跨入 MCP 时代
  • python: update() 函数的用法和例子
  • class path resource [] cannot be resolved to absolute file path
  • 【LLaMA-Factory】使用LoRa微调训练DeepSeek-R1-Distill-Qwen-7B
  • NOIP1999提高组.拦截导弹
  • PPL困惑度的计算
  • 【分享】KK/BD/XL等六大不限速下载
  • 图灵爬虫练习平台第七题千山鸟飞绝js逆向
  • 计算机网络笔记(十七)——3.4扩展的以太网
  • 【论文阅读】FreePCA
  • YOLO使用CableInspect-AD数据集实现输电线路缺陷检测
  • ArrayList和LinkedList区别
  • cilium路由模式和aws-eni模式下的IPAM
  • Dify MCP实战 - 邮件发送
  • Cron 表达式
  • AWS IoT Core与MSK跨账号集成:突破边界的IoT数据处理方案
  • 850亿元!2025年中央金融机构注资特别国债(一期)拟第一次续发行
  • 图忆|红场阅兵:俄罗斯30年来的卫国战争胜利日阅兵式
  • 国家税务总局泰安市税务局:山东泰山啤酒公司欠税超536万元
  • 一热就出汗 VS 热死都不出汗的人,哪个更健康?
  • 首批证券公司科创债来了!拟发行规模超160亿元
  • 国家发改委副主任谈民营经济促进法:以法治的稳定性增强发展的确定性