失配树学习笔记
失配树,是一种奇妙的数据结构,它利用 KMP、LCA 解决求两前缀的最长公共 Border 的问题。
首先介绍一下什么是 Border,我们知道 nxt 数组是前后缀相同的最大长度,Border 相当于是 nxt 数组的弱化版,只是去掉了“最大”的限制。
我们考虑如何建立一棵失配树(fail 树),对于每一个长度为 i i i 的前缀,我们预处理出它的 nxt,然后按照 i i i 指向 nxt[i],即 nxt[i] 是 i i i 的爹。
对于两个前缀的最长 Border,我们只需要对于两个区间的 i i i、 j j j 求出它们的 LCA 即可。这里需要注意一个坑,如果 i i i 和 j j j 的 LCA 是他们中的一个,那么我们要把 LCA 上提一步,即返回 f[i][0] 或 f[j][0](返回他们的父亲)。
练手板子题
代码如下:
#include <bits/stdc++.h>
using namespace std;const int maxn=1e6+5;
char s[maxn];
int f[maxn][25],dep[maxn];int lca(int x,int y)
{if(dep[x]<dep[y]) swap(x,y);for(int i=20;i>=0;i--) if(dep[f[x][i]]>=dep[y]) x=f[x][i];if(x==y) return f[x][0];for(int i=20;i>=0;i--)if(f[x][i]!=f[y][i])x=f[x][i],y=f[y][i];return f[x][0];
}int main()
{scanf("%s",s+1);int len=strlen(s+1);f[0][0]=f[1][0]=0;dep[0]=0;dep[1]=1;for(int i=1,j=0;i<=len;i++){while(j&&s[i+1]!=s[j+1]) j=f[j][0];if(s[i+1]==s[j+1]) j++;f[i+1][0]=j,dep[i+1]=dep[j]+1;}int m;cin>>m;for(int j=1;j<=20;j++) for(int i=1;i<=len;i++) f[i][j]=f[f[i][j-1]][j-1];while(m--){int p,q;cin>>p>>q;cout<<lca(p,q)<<endl;}return 0;
}
相关文章:
失配树学习笔记
失配树,是一种奇妙的数据结构,它利用 KMP、LCA 解决求两前缀的最长公共 Border 的问题。 首先介绍一下什么是 Border,我们知道 nxt 数组是前后缀相同的最大长度,Border 相当于是 nxt 数组的弱化版,只是去掉了“最大”…...
【Electron】Not allowed to load local resource
问题描述 使用 audio 标签播放音频文件,控制台报错 Not allowed to load local resource。 Not allowed to load local resource原因分析 通常是安全策略所引起的。Electron 默认情况下禁止加载本地资源,以防止潜在的安全风险。 解决方案 在 main.js…...
Maven 基础教程系列
Maven是一个项目开发管理和理解工具。基于项目对象模型的概念:构建、依赖关系管理、文档创建、站点发布和分发发布都由pom.xml声明性文件控制。Maven可以通过插件进行扩展,以使用许多其他开发工具来报告或构建过程。 一、Maven 使用教程-CSDN博客 二、…...
c++之类和对象
1.auto 可以自动推导结果的类型 typeid()可以打印类型 引用也可以 auto真正的价值可以简化迭代器的写法 并且auto定义的变量必须初始化。 不能做参数 返回值也不可以用auto auto不能用来声明数组 如果想要修改要用引用且指针不好解决。 c11之后的nullptr 以后再用空指针用nul…...
分布式应用开发的核心技术系列之——基于TCP/IP的原始消息设计
本文由葡萄城技术团队原创并首发。转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。 前言 本文的内容主要围绕以下几个部分: TCP/IP的简单介绍。消息的介绍。基于消息分类的传输格式&…...
医疗领域的数字化浪潮:互联网医院平台的关键作用
数字化浪潮正在迅速改变医疗领域的方式和效率。互联网医院平台作为数字化医疗的关键元素,正在为医疗行业带来巨大的变革。本文将探讨互联网医院平台的关键作用,并提供一个示例,使用Python编写一个简单的医疗预约系统。 互联网医院平台的关键…...
将本地的项目上传到Gitee
目录 1.先在Gitee新建一个仓库,提交即可 2.进入到要上传的项目里面,右键选择 Git Bash Here 3.右键后就打开了Git命令窗口 4.配置你的用户名和邮箱(已经配置过则可跳过) 5.查看你的用户名和邮箱配置(可不查看) 6.输入git init指令&#…...
概率论_概率公式中的分号(;)、逗号(,)、竖线(|)
1. 概率公式中的分号(;)、逗号(,)、竖线(|) ; 分号代表前后是两类东西,以概率P(x;θ)为例,分号前面是x样本,分号后边是模型参数。 , 逗号代表两者地位平等,代表与的关系 | 竖线代表 if,一上面为例,就是如果…...
Spark Streaming 整合 Kafka
本文代码链接:https://download.csdn.net/download/shangjg03/88442308 1.版本说明 Spark 针对 Kafka 的不同版本,提供了两套整合方案:`spark-streaming-kafka-0-8` 和 `spark-streaming-kafka-0-10`,其主要区别如下: 本文使用的 Kafka 版本为 `kafka_2.12-2.2.0`,故采用…...
【API篇】五、Flink分流合流API
文章目录 1、filter算子实现分流2、分流:使用侧输出流3、合流:union4、合流:connect5、connect案例 分流,很形象的一个词,就像一条大河,遇到岸边有分叉的,而形成了主流和测流。对于数据流也一样…...
flutter开发的一个小小小问题,内网依赖下不来
问题 由于众所周知的原因,flutter编译时,经常出现Could not get resource https://storage.googleapis.com/download.flutter.io…的问题,如下: * What went wrong: Could not determine the dependencies of task :app:lintVit…...
RabbitMQ队列及交换机的使用
目录 一、简单模型 1、首先控制台创建一个队列 2、父工程导入依赖 3、生产者配置文件 4、写测试类 5、消费者配置文件 6、消费者接收消息 二、WorkQueues模型 1、在控制台创建一个新的队列 2、生产者生产消息 3、创建两个消费者接收消息 4、能者多劳充分利用每一个消…...
分布式唯一Id,它比GUID好
分布式唯一Id,它比GUID好 一、前言 分布式唯一Id,顾名思义,是指在全世界任何一台计算机上都不会重复的唯一Id。 在单机/单服务器/单数据库的小型应用中,不需要用到这类东西。但在高并发、海量数据、大型分布式应用中,…...
计算机服务器中了勒索病毒怎么解决,勒索病毒解密流程,数据恢复
计算机服务器中了勒索病毒是一件非常令人头疼的事情,勒索病毒不仅会加密企业服务器中的数据,还会对企业计算机系统带来损害,严重地影响了企业的正常运转。最近,云天数据恢复中心工程师总结了,今年以来网络上流行的勒索…...
【NPM】vuex 数据持久化库 vuex-persistedstate
在 GitHub 上找到:vuex-persistedstate。 安装 npm install --save vuex-persistedstate使用 import { createStore } from "vuex"; import createPersistedState from "vuex-persistedstate";const store createStore({// ...plugins: [cr…...
英语——分享篇——每日200词——2601-2800
2601——resistant——[rɪzɪstənt]——adj.抵抗的——resistant——resi热死(拼音)st石头(拼音)ant蚂蚁(熟词)——热死了石头上的蚂蚁还在抵抗——The body may be less resistant if it is cold. ——天冷时,身体的抵抗力会下降。 2602——prospect——[prɒspe…...
SpringCloud-Sentinel
一、介绍 (1)提供界面配置配置服务限流、服务降级、服务熔断 (2)SentinelResource的blockHandler只处理后台配置的异常,运行时异常fallBack处理,且资源名为value时才生效,走兜底方法 二、安装…...
为什么索引要用B+树来实现呢,而不是B树
首先,常规的数据库存储引擎,一般都是采用 B 树或者 B树来实现索引的存储。 B树 因为 B 树是一种多路平衡树,用这种存储结构来存储大量数据,它的整个高度会相比二叉树来说,会矮很多。 而对于数据库来说,所有…...
使用vue3前端开发的一些知识点
Vue 3 是一种流行的 JavaScript 框架,用于构建用户界面。它是 Vue.js 框架的第三个主要版本,具有许多新特性和性能改进。下面是 Vue 3 的一些常用语法和概念的详细介绍: 创建 Vue 实例: 在 Vue 3 中,你可以通过创建一个…...
零基础Linux_20(进程信号)内核态和用户态+处理信号+不可重入函数+volatile
目录 1. 内核态和用户态 1.1 内核态和用户态概念 1.2 内核态和用户态转化 2. 处理信号 2.2 捕捉信号 2.2 系统调用sigaction 3. 不可重入函数 4. volatile关键字 5. SIGCHLD信号(了解) 6. 笔试选择题 答案及解析 本篇完。 1. 内核态和用户态…...
2026指纹浏览器性能优化实战:多开稳定性与资源占用控制全解析
在 2026 年多账号规模化运营场景中,指纹浏览器的多开稳定性与资源占用控制,已成为影响运营效率的核心因素。无论是跨境电商的数十个店铺同步运营,还是社媒矩阵的上百个账号日常维护,抑或是数据采集的批量环境部署,都对…...
告别调参玄学:用EEGNet和MNE-Python搞定脑电分类,附完整可运行代码
脑电信号分类实战:EEGNet与MNE-Python的黄金组合 在神经科学和脑机接口研究中,脑电信号分类一直是个令人着迷又充满挑战的领域。传统方法往往需要复杂的特征工程和大量领域知识,而深度学习技术特别是EEGNet的出现,为这一领域带来了…...
Win10网络设置进阶:除了图形界面,用netsh命令一键搞定固定IP/网关/DNS
Win10网络配置终极指南:netsh命令的高效玩法 每次在会议室里手忙脚乱地点击十几个窗口只为改个IP地址?或者需要给几十台设备配置相同网络参数时,还在机械重复图形界面的操作?Windows内置的netsh工具能让你彻底告别这种低效工作方式…...
别再只用SysTick了!用GD32F103的TIMER1实现更灵活的1ms延时(附完整代码)
突破SysTick限制:GD32F103定时器高阶延时方案实战 在嵌入式开发中,精确的延时控制如同系统的心跳,而SysTick作为ARM内核标配的简易定时器,常被开发者当作默认选择。但当我们面对多任务调度、可变频率延时或复杂时序控制时…...
Windows Cleaner:如何通过3个简单步骤解决C盘空间不足和系统卡顿问题
Windows Cleaner:如何通过3个简单步骤解决C盘空间不足和系统卡顿问题 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服! 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner Windows Cleaner是一款专为Windo…...
LeetCode 1855.下标对中的最大距离:双指针
【LetMeFly】1855.下标对中的最大距离:双指针 力扣题目链接:https://leetcode.cn/problems/maximum-distance-between-a-pair-of-values/ 给你两个 非递增 的整数数组 nums1 和 nums2 ,数组下标均 从 0 开始 计数。…...
别再被pip依赖冲突搞懵了!手把手教你用‘loosen’和‘delete’搞定TensorFlow版本难题
深度学习环境搭建避坑指南:巧用版本策略化解TensorFlow依赖冲突 深夜的咖啡杯旁,你正兴奋地克隆了一个GitHub上的深度学习项目,准备复现论文中的实验结果。然而当pip install -r requirements.txt命令执行后,屏幕上突然弹出的红色…...
如何用Audio Slicer让音频智能分段变得简单高效
如何用Audio Slicer让音频智能分段变得简单高效 【免费下载链接】audio-slicer A simple GUI application that slices audio with silence detection 项目地址: https://gitcode.com/gh_mirrors/aud/audio-slicer 你是否曾经面对长达数小时的音频文件,需要手…...
别再只会让电机转!用STM32和Proteus深度模拟28BYJ-48步进电机的加减速曲线与堵转检测
基于STM32的28BYJ-48步进电机高级控制:S形曲线与堵转检测实战 在嵌入式开发领域,步进电机控制常被视为入门级项目——接上驱动模块,写几行代码让电机转动似乎就大功告成。但当我们把场景切换到实际产品中,粗暴的启停控制和速度突变…...
Ryujinx模拟器终极实战指南:从零配置到性能优化的完整教程
Ryujinx模拟器终极实战指南:从零配置到性能优化的完整教程 【免费下载链接】Ryujinx 用 C# 编写的实验性 Nintendo Switch 模拟器 项目地址: https://gitcode.com/GitHub_Trending/ry/Ryujinx 想要在PC上畅玩Switch游戏?Ryujinx模拟器是你的最佳选…...
