首页 > 其他分享 >学习笔记:kmp&失配树

学习笔记:kmp&失配树

时间:2023-08-12 23:14:48浏览次数:38  
标签:dep int cin 笔记 -- MAXN kmp 失配

1.kmp

这就不讲了吧,border数组弄懂就是水算法了!但是变种真的毒瘤啊

2.hash

emmmmm

3.fail树

这就是kmp的border数组的变种

kmp一次一次next跳,太慢了!

我们就想到倍增优化嘛

\(n\)个点,\(n-1\) 条边 联通

一眼顶针这就是一颗树

那么找共同前缀就是找LCA

倍增啥的搞搞就得

传送:here

Code:

#include<bits/stdc++.h>
#define ll long long
#define MAXN 1000005
using namespace std;
int n,g;
int nxt[MAXN];
int f[MAXN][24],dep[MAXN];
string s;
void get(string s)
{
	int i=0,j=-1;
	nxt[0]=-1;
	while(i<=s.size())
	{
		if(j==-1||s[i]==s[j])
			nxt[++i]=++j;
		else 
			j=nxt[j];
	}
}
int lca(int u,int v)
{
	if(dep[u]<dep[v]) swap(u,v);
	for(int i=20;i>=0;i--)
		if(dep[f[u][i]]>=dep[v]) u=f[u][i];
	for(int i=20;i>=0;i--)
		if(f[u][i]!=f[v][i]) u=f[u][i],v=f[v][i];
	if(u==v) return u;
	return f[u][0]; 
}
int main()
{ 
	ios::sync_with_stdio(false);	
	cin.tie(0);
	cout.tie(0); 
	cin>>s;
	get(s);
	for(int i=1;i<=s.size();i++)
	{
		f[i][0]=nxt[i];
		dep[i]=dep[nxt[i]]+1;
//		cout<<dep[i]<<" ";
		for(int j=1;f[i][j-1];j++)
			f[i][j]=f[f[i][j-1]][j-1];
	}
	cin>>g;
	while(g--)
	{
		int u,v;
		cin>>u>>v;
		cout<<lca(nxt[u],nxt[v])<<"\n";
	}
	return 0;
}

今天的算法真是通俗

标签:dep,int,cin,笔记,--,MAXN,kmp,失配
From: https://www.cnblogs.com/g1ove/p/17625793.html

相关文章

  • 学习笔记:网络流
    0.前言题目传送门:here1.概念网络是什么?一张带权的图网络最大流是什么?举个例子想象一些有向的水管,每个水管都有固定的流量上限,有源点可以出水,有汇点可以收水,问汇点单位时间最多可收到多少水。有很多人要坐火车从起点站要到终点站每个站的票数是确定的乘客经过一个站......
  • 学习笔记:splay树(2)
    1.题目描述传送门:here大意:给你一个序列,让你每次翻转区间\([l,r]\),并且输出最后的区间2.思路1.暴力每次暴力翻转区间时间复杂度\(O(n^2)\)妥妥T2.平衡树考虑怎么用splay实现我们知道平衡树的特性:不管怎么树旋转它的中序遍历一定是不变的而且\(BST\)的中序遍历一定是从......
  • 大疆无人机飞行技术学习笔记
    好的作品:飞行技术(手稳)+后期+创意+景色新手操作:自动起飞、降落手动起飞、降落空中刹停、一键返航(设置返航高度)镜头上下角度调整飞行模式:稳定、普通、运动拍照录像下一步学习:机械臂拍摄、延时摄影、跟踪......
  • requests源码阅读笔记
    requests框架结构整个架构包括两部分:Session持久化参数和HTTPAdapter适配器连接请求,其余部分都是urllib3的内容。......
  • 学习笔记:反転魔法
    学习笔记:反転魔法1.反演是什么?反演这个词,意思是两个函数(当然也可以是数列一类的东西)的双向求和关系。比如已知\(f(i)=\sum\limits_{j=0}^{+\infty}A(i,j)\timesg(j)\),然后推出\(g(i)=\sum\limits_{j=0}^{+\infty}B(i,j)\timesf(j)\),这就是一对反演关系。那么反演......
  • 《深入理解Java虚拟机》读书笔记:垃圾收集器
    垃圾收集器 HotSpot虚拟机包含的所有收集器如图3-5所示。图3-5展示了7种作用于不同分代的收集器,如果两个收集器之间存在连线,就说明它们可以搭配使用。新生代收集器:Serial、ParNew、ParallelScavenge,新生代收集器均采用复制算法老年代收集器:SerialOld(标记-整理算法)、Paral......
  • 笔记工具
    这两周从听#纵横四海播客#刻意练习和笔记的力量开始逐渐关注到双链笔记,其实最早在听ByteTalk的时候就有听到一期嘉宾介绍到一款双链笔记#logseq.其实给我印象最深的是刻意练习中关于对学习的讲解,其中提到刻意练习最重要的几部分:chunk和link.而双链笔记最主要的......
  • Vue学习笔记:路由开发 Part 08 导航守卫
    vue-router提供的导航守卫主要用来通过跳转或取消的方式守卫导航。这里有很多方式植入路由导航中:全局的,单个路由独享的,或者组件级的。全局前置守卫可以使用 router.beforeEach 注册一个全局前置守卫。当一个导航触发时,全局前置守卫按照创建顺序调用。守卫是异步解析执行,此时导航......
  • C语言学习笔记(十)文件操作
    十、文件操作程序文件数据文件本章学习的是数据文件文件名包含三部分:文件路径+文件名主干+文件后缀c:\code\test.php文件类型文本文件:肉眼就能看懂二进制文件:数据在内存中以二进制的形式存储,若不加转换就输出到外存,就是二进制文件字符一律以ASCII码形式存......
  • 【做题笔记】网络流24题
    Part1.飞行员配对方案问题Problem有两个集合\(A\),\(B\)。给定正整数\(n\),\(m\)。\(A=\{x|1\leqx\leqm\}\),\(B=\{y|m+1\leqy\leqn\}\)。现在要将\(A\)与\(B\)集合的元素一一配对,有若干个配对关系,形如“\(u\),\(v\)可凑一对”。求有多少个元素能配成一对,并求......