Hash String 学习笔记

目录

        咕咕咕

Trie 树/字典树

       P8306 【模板】字典树

           咕咕咕(感觉比较简单(吗))(我才不会说是我懒呢)

KMP

        一个求最长公共前后缀的东西

        P3375 【模板】KMP

        写法一
#include<bits/stdc++.h>
using namespace std;
int nxt[2000005];
string s1,s2;
void get_nxt(string b)
{for(int k=1,l=0;k<b.length();k++){while(b[k]!=b[l] && l>0) l=nxt[l-1];if(b[k]==b[l]) l++;nxt[k]=l;}
}
//求最长公共前后缀
void kmp(string a,string b)
{for(int k=0,l=0;k<a.length();k++){while(a[k]!=b[l] && l>0) l=nxt[l-1];if(a[k]==b[l]) l++;if(l==b.length()) cout<<k+2-b.length()<<"\n";}
}
//匹配
int main()
{cin>>s1>>s2; get_nxt(s2); kmp(s1,s2);for(int i=0;i<s2.length();i++) cout<<nxt[i]<<' ';return 0;
}
        写法二(从大佬那学来的~)

直接把s2接在s1后面
匹配的公共前后缀中长度等于le2的时候,满足条件
然后会发现,get_nxt求的是最长的,
于是往前跳,并进行路径压缩
时间复杂度均摊O(1)  (吗)

#include<bits/stdc++.h>
using namespace std;
int l2,nxt[2000005],fl[2000005];
string s1,s2;
int get(int x)
{if(fl[x]) return fl[x];if(x<l2) { fl[x]=2; return 2; }return fl[x]=get(nxt[x-1]);
}
void kmp(string b)
{for(int k=1,l=0;k<b.length();k++){while(b[k]!=b[l] && l>0) l=nxt[l-1];if(b[k]==b[l]) l++;nxt[k]=l;}
}
int main()
{cin>>s1>>s2; l2=s2.length(); fl[l2]=1;s1=s2+s1; kmp(s1);for(int i=l2+l2-1;i<s1.length();i++) if(get(nxt[i])==1) cout<<i-l2-l2+2<<"\n";for(int i=0;i<l2;i++) cout<<nxt[i]<<" ";return 0;
}

manacher/马拉车

        没想到,马拉车居然是直接音译的     

        这是一个关于回文串的O(n)算法

P3805 【模板】manacher

写法一

        用d[i]表示以i为中间为的回文串单侧的长度

//oiwiki上的描述更加清晰#include<bits/stdc++.h>
using namespace std;
int l,r,le,k,d[110000005],ma;
string s;
int main()
{cin>>s; le=s.length();l=0,r=-1;//l 和 r 分别为该回文串左右边界的位置for(int i=0;i<le;i++){k=(i>r)?1:min(r-i+1,d[l+r-i]);//若当前位置不在当前段内,暴力枚举while(i+k<le && i-k>=0 && s[i+k]==s[i-k]) k++;d[i]=k--; ma=max(ma,k*2+1);if(i+k>r) r=i+k,l=i-k;}//先做长度为奇数的,即中间位为imemset(d,0,sizeof d); l=0,r=-1;for(int i=0;i<le;i++){k=(i>r)?0:min(r-i+1,d[l+r-i+1]);while(i+k<le && i-k-1>=0 && s[i+k]==s[i-k-1]) k++;d[i]=k--; ma=max(ma,(k+1)*2);if(i+k>r) r=i+k,l=i-k-1;}//做长度为奇数的  注意细节cout<<ma;return 0;
}
写法二

#include<bits/stdc++.h>
using namespace std;
int le,l,r,k,ma,d[22000005];
string s,ss;
int main()
{cin>>s; le=s.length();ss+='^'; ss+='#'; r=-1;
//在串中各一位加入一个原本没有的字符
//在头和尾加入字符,可以不用判边界,还可以防止越界for(int i=0;i<le;i++) ss+=s[i],ss+='#'; ss+='@';
//在加入后,对奇串不影响,会事原本的偶串变为以#为中间位置的奇串
//然后就安神找奇串做一遍le=le*2+1;for(int i=1;i<=le;i++){k=(i>r)?1:min(r-i,d[l+r-i]);while(ss[i-k]==ss[i+k]) k++;d[i]=k--; ma=max(ma,(i&1)?(k+1)/2*2:1+k/2*2);
//这里求最大值可能有点抽象,不过由于太菜了,还没想到什么别的算法
//有的话可以私信if(i+k>r) l=i-k,r=i+k;}cout<<ma;return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/25987.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【JavaScript脚本宇宙】表格大变身:探秘JavaScript库的数据表格魔法

优化数据展示&#xff1a;精选JavaScript表格增强库对比 前言 在现代Web开发中&#xff0c;利用各种库和框架来增强数据表格的功能已经成为常态。通过使用特定的JavaScript库和插件&#xff0c;开发人员可以轻松地实现交互性强、美观且高性能的数据表格&#xff0c;从而提升用…

JavaScript前端技术入门教程

引言 在前端开发的广阔天地中&#xff0c;JavaScript无疑是最耀眼的一颗明星。它赋予了网页动态交互的能力&#xff0c;让网页从静态的文本和图片展示&#xff0c;进化为可以与用户进行实时交互的丰富应用。本文将带您走进JavaScript的世界&#xff0c;为您提供一个入门级的教…

Nginx访问日志

Nginx日志是Nginx Web服务器产生的记录文件&#xff0c;主要用于跟踪和分析服务器的访问情况以及错误信息。Nginx日志主要分为两大类&#xff1a;访问日志 (access_log): 访问日志记录了每一次客户端对Nginx服务器的HTTP请求的详细信息&#xff0c;这对于统计分析、流量监控、用…

SpringBoot3+Mybatis-Plus+h2数据库,入门Mybatis-Plus

SpringBoot3Mybatis-Plush2数据库&#xff0c;入门Mybatis-Plus mybatis-plus官网地址maven依赖数据库脚本配置文件实体类Mapper入门程序启动程序测试单元测试测试结果 Service层接口service层接口单元测试测试结果 项目结构 mybatis-plus官网地址 https://www.baomidou.com/ …

vue manually select

1 vuex 一个包含多个页面的应用程序&#xff0c;每个页面包含多个组件&#xff0c;这些组件拥有各自的表单&#xff0c;并且希望这些表单展示的数据能够在不同组件之间共享&#xff0c;那么可以使用 Vuex 来管理这些数据。在这种情况下&#xff0c;您可以将这些需要共享的数据存…

2002NOIP普及组真题 2. 选数

线上OJ&#xff1a; 【02NOIP普及组】选数 核心思想&#xff1a; 1、使用 模板函数 isPrime() 来判断一个数是否为素数。 2、定义一个函数 dfs 来进行深度优先搜索。在dfs函数中&#xff0c;通过递归的方式遍历所有可能的组合&#xff0c;并计算每个组合的和。 在 dfs 中&…

服务器升级Nacos2.2.3报错、rocksdb报错问题处理

由于系统之前使用的Nacos2.0.4有反序列化漏洞&#xff0c;故需要将Nacos升级到2.2.3版本。 该Nacos在本地运行没有问题&#xff0c;但是在Windows服务器运行就会报错&#xff1a; rocksdb java.lang.UnsatisfiedLinkError: C:\Users\Administrator\AppData\Local\Temp\2\libro…

风能远程管理ARMxy嵌入式系统深度解析

智能技术正以前所未有的速度融入传统能源管理体系&#xff0c;而ARMxy工业计算机作为这一变革中的关键技术载体&#xff0c;正以其独特的性能优势&#xff0c;为能源管理的智能化升级铺设道路。本文将聚焦于智能电表、太阳能电站监控、风力发电站远程管理三大应用场景&#xff…

【2023】LitCTF

LitCTF2023&#xff08;复现&#xff09; Web&#xff1a; 1、我Flag呢&#xff1f; ​ ctrlu 读取源码&#xff0c;在最后发现了flag&#xff1a; <!--flag is here flagNSSCTF{3d5218b9-4e24-4d61-9c15-68f8789e8c48} -->2、PHP是世界上最好的语言&#xff01;&…

网站安全性评估方法

评估一个网站的安全性是一个多方面的过程&#xff0c;涉及到对网站的技术架构、代码质量、数据处理、用户交互等多个维度的考察。以下是一些常用的评估方法&#xff1a; 1.了解常见的安全风险&#xff1a;包括恶意软件、钓鱼攻击、跨站脚本攻击等&#xff0c;这些都是网站可能…

PostgreSQL的视图pg_roles

PostgreSQL的视图pg_roles pg_roles 是 PostgreSQL 中的一个系统视图&#xff0c;提供了关于数据库角色&#xff08;用户和组&#xff09;的信息。PostgreSQL 中的角色用于管理数据库的权限、登录能力以及其他安全相关的特性。通过查询 pg_roles 视图&#xff0c;数据库管理员…

oj数据库名字总结

文章目录 1. oj数据库名字解析1. compileinfo2. contest3. loginlog4. news5. online6. privilege7. problem8. runmtimeinfo9. solution10. source_code 和 source_code_user11. user 2. 删除账户1.信息删除&#xff08;不删除其做题数据&#xff09;2.彻底删除&#xff08;包…

SQL159 每个创作者每月的涨粉率及截止当前的总粉丝量

描述 用户-视频互动表tb_user_video_log iduidvideo_idstart_timeend_timeif_followif_likeif_retweetcomment_id110120012021-09-01 10:00:002021-09-01 10:00:20011NULL210520022021-09-10 11:00:002021-09-10 11:00:30101NULL310120012021-10-01 10:00:002021-10-01 10:00…

RAG检索与生成的融合

1、rag定义 检索增强生成 (RAG) 模型代表了检索系统和生成模型两大不同但互补组件完美结合的杰作。通过无缝整合相关信息检索和生成与背景相关的响应&#xff0c;RAG模型在人工智能领域达到了前所未有的复杂程度。 2、rag工作流程 2.1、rag整体框架 query通过llm处理后&…

ISO 19115-3:2023 基本概念的 XML 架构实现

前言 ISO(国际标准化组织)是由各国标准化机构(ISO 成员机构)组成的全球性联合会。制定国际标准的工作通常由 ISO 技术委员会完成。对某一技术委员会所关注的主题感兴趣的每个成员机构都有权在该委员会中派代表。与 ISO 联络的国际组织、政府和非政府组织也参与工作。ISO 与…

3.haproxy负载均衡

haproxy负载均衡 一、haproxy介绍1、负载均衡类型 二、haproxy配置文件1、backend2、frontend 三、haproxy实现MySQL负载均衡 —— 4层1、后端两台MySQL配置双主复制2、安装配置haproxy2.1 安装软件2.2 编辑配置2.3 启动haproxy2.4 测试通过haproxy正常连接MySQL 四、haproxy实…

张大哥笔记:从古至今,赚钱最快的路子就一个,从未改变

从古至今&#xff0c;赚钱最快的路子就一个&#xff0c;而且从未改变&#xff0c;那就是信息差&#xff01; 不要误解信息差为某种高端复杂的概念&#xff1b;其本质很简单——它就是"你知道而别人不知道的信息"。 曾经我也认为&#xff0c;随着互联网的发展&#x…

Ubuntu20.04配置qwen0.5B记录

环境简介 Ubuntu20.04、 NVIDIA-SMI 545.29.06、 Cuda 11.4、 python3.10、 pytorch1.11.0 开始搭建 python环境设置 创建虚拟环境 conda create --name qewn python3.10预安装modelscope和transformers pip install modelscope pip install transformers安装pytorch co…

Android.基本用法学习笔记

设置文本的内容 先在strings.xml声明变量 方法1. 方法2. 设置文本的大小 1.单位dp&#xff0c;大家可以去学一下有关的单位换算 2. 设置文本颜色 1. 2. 4.设置文本背景颜色 1. 2. 设置视图的宽高 与上级视图一致&#xff0c;也就是上一级有多宽就有多少 1. 2. 3. 4. 设置视图…

【全网最简单的解决办法】vscode中点击运行出现仅当从 VS 开发人员命令提示符处运行 VS Code 时,cl.exe 生成和调试才可用

首先确保你是否下载好了gcc编译器&#xff01;&#xff01;&#xff01; 检测方法&#xff1a; winR 打开cmd命令窗 输入where gcc(如果出现路径则说明gcc配置好啦&#xff01;) where gcc 然后打开我们的vscode 把这个文件删除掉 再次点击运行代码&#xff0c;第一个出现…