当前位置: 首页 > 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
http://www.xdnf.cn/news/364537.html

相关文章:

  • 学习黑客认识Security Operations Center
  • 雷赛伺服L7-EC
  • 抖音 “碰一碰” 发视频:短视频社交的新玩法
  • Midjourney-V7:支持参考图片头像或背景生成新保真图
  • Spring事务传播行为-实践向
  • 软件确认报告:审查功能、评估标准及推动软件稳定高效运行
  • 【Cesium入门教程】第五课:数据源
  • JAVA学习-练习试用Java实现“一个游戏AI :如井字游戏(Tic-Tac-Toe)的AI对手”
  • 【二】CURL命令解析
  • 报错 <pcl/features/feature_evaluation/feature_evaluation_framework.h> 不存在的解决办法
  • Java中的控制流语句:if、switch、for、foreach、while、do-while
  • Redis 8.0携新功能,重新开源
  • 【Unity】Unity中修改网格的大小和倾斜网格
  • 如何解决Jmeter中的乱码问题?
  • 【PHP】基于币安链,一个完整的USDT转账示例
  • 【python】 python拆包
  • 【QT】项目打包与发布安装
  • 图灵爬虫练习平台第七题千山鸟飞绝js逆向
  • 宠物医院预约|基于Java+vue的宠物医院预约平台系统(源码+数据库+文档)
  • windows celery OSError: [WinError 6] 句柄无效
  • ELF-如何学习
  • C++(1):整数常量
  • Mysql存储引擎
  • 期刊论文写作注意点
  • LVGL源码学习之渲染、更新过程(1)---标记和激活
  • 【C/C++】为什么要noexcept
  • 机器学习第二讲:对比传统编程:解决复杂规则场景
  • 机器学习实操 第二部分 第19章 大规模训练和部署 TensorFlow 模型
  • RPG11.创建玩家Ability类
  • 基于CNN的猫狗图像分类系统