P5410 【模板】扩展 KMP(Z 函数)

用更容易理解的方法处理出

s[l…………r]=s[1…………r-l+1]

常数比KMP略大,时间复杂度\(O(n)\),方法和manacher很像

#include<bits/stdc++.h>
using namespace std;
#define rint register int
const int N=20000010;
char a[N],b[N];
int z[N],p[N];
long long ans;
inline void Z_function(char *a) {
int n=strlen(a+1);
z[1]=n;for(rint i=2;i<=n;++i)z[i]=0;
for(rint i=2,l=0,r=0;i<=n;++i) {
if(i<=r)z[i]=min(z[i-l+1],r-i+1);
while(i+z[i]<=n&&a[i+z[i]]==a[z[i]+1])++z[i];
if(i+z[i]-1>r)l=i,r=i+z[i]-1;
}
}
inline void exkmp(char *a,char *b) {
int n=strlen(a+1);
for(rint i=1;i<=n;++i)p[i]=0;
for(rint i=1,l=0,r=0;i<=n;++i) {
if(i<=r)p[i]=min(z[i-l+1],r-i+1);
while(i+p[i]<=n&&a[i+p[i]]==b[p[i]+1])++p[i];
if(i+p[i]-1>r)l=i,r=i+p[i]-1;
}
}
int main() {
scanf("%s%s",a+1,b+1);
Z_function(b);ans=0;for(rint i=1,m=strlen(b+1);i<=m;++i)ans^=1ll*(z[i]+1)*i;printf("%lld\n",ans);
exkmp(a,b); ans=0;for(rint i=1,n=strlen(a+1);i<=n;++i)ans^=1ll*(p[i]+1)*i;printf("%lld\n",ans);
return 0;
}

这东西也可以做字符串匹配。把模式串接在文本串前面,跑一遍Z-function,找到 \(Z_i \geq lenb\) 的即可

Z-function的更多相关文章

  1. js的一些function

    /** * * 根据秒数返回 一个日期范围 * timerFilter(10) */ function timerFilter(n) { let days = 31; // 一月多少天 const o ...

  2. Zepto源码分析之二(新旧版本zepto.Z方法的区别)

    在上一节中讲到Z()方法,是在初始化函数init中直接调用zepto.Z() zepto.Z = function(dom, selector) { dom = dom || [] dom.selec ...

  3. 昆仑游戏[JS加密修改]

    昆仑游戏:http://www.kunlun.com/index.html JS加密修改 BigTools=window.BigTools;//重点 RSAKeyPair=window.RSAKeyP ...

  4. highcharts

    preparation Highcharts Highcharts是一个制作图表的纯Javascript类库,主要特性如下: 兼容性:兼容当今所有的浏览器,包括iPhone.IE和火狐等等: 对个人用 ...

  5. 多功能前台交互效果插件superSlide

    平时我们常用的"焦点图/幻灯片""Tab标签切换""图片滚动""无缝滚动"等效果要加载n个插件,又害怕代码冲突又怕不兼容 ...

  6. javascript 执行上下文的理解

    首先,为什么某些函数以及变量在没有被声明以前就可以被使用,javascript引擎内部在执行代码以前到底做了些什么?这里,想信大家都会想到,变量声明提前这个概念: 但是,以下我要讲的是,声明提前的这个 ...

  7. How to implement a neural network

    神经网络的实践笔记 link: http://peterroelants.github.io/posts/neural_network_implementation_part01/ 1. 生成训练数据 ...

  8. JavaScript中typeof、toString、instanceof、constructor与in

    JavaScript 是一种弱类型或者说动态语言.这意味着你不用提前声明变量的类型,在程序运行过程中,类型会被自动确定. 这也意味着你可以使用同一个变量保存不同类型的数据. 最新的 ECMAScrip ...

  9. JS产生随机数的几个用法!

    <script> function GetRandomNum(Min,Max) { var Range = Max - Min; var Rand = Math.random(); ret ...

  10. 迷你版jQuery——zepto核心源码分析

    前言 zepto号称迷你版jQuery,并且成为移动端dom操作库的首选 事实上zepto很多时候只是借用了jQuery的名气,保持了与其基本一致的API,其内部实现早已面目全非! 艾伦分析了jQue ...

随机推荐

  1. 第2节 storm实时看板案例:9、实时看板综合案例

    =================================== 10.实时看板案例 10.1 项目需求梳理 根据订单mq,快速计算双11当天的订单量.销售金额.

  2. 二、Navicat、IDEA、nopad、eclipse、excle工具使用、问题、快捷键

    1.Navicat工具: 目的:本地数据库与远程数据库之间数据导入导出 步骤1:文件--新建oracle链接/mysql的连接 步骤2:工具-选项:将本地oracle的bin\oci.dll 的路径复 ...

  3. 全程2分钟!教你如何免费下载Windows 10

    全程2分钟!教你如何免费下载Windows 10 2014-10-02 08:40:59  来源:pconline 原创  作者:唐山居人  责任编辑:caoweiye  (评论314条)   终于在 ...

  4. C# FTp 上传,下载

    public class FtpHelper { string ftpServerIP; string ftpRemotePath; string ftpUserID; string ftpPassw ...

  5. ElasticSearch入门了解

    什么是Elasticsearch: Elasticsearch,分布式,高性能,高可用,可伸缩的搜索和分析系统 1.什么是搜索? 搜索,就是在任何场景下,找寻你想要的信息,这个时候,会输入一段你要搜索 ...

  6. P1077 互评成绩计算

    P1077 互评成绩计算 转跳点:

  7. 扩展的Sobel 算子

    Custom Extended Sobel Filters  https://arxiv.org/pdf/1910.00138.pdf sobel算子是进行边缘检测的一个重要算子.它通常是一个3x3的 ...

  8. ThinkPad重大更新!5款创意设计PC齐发2日

    导读 日前,ThinkPad巨匠P系列专业移动工作站迎来全线更新,包括ThinkPad P1隐士2019.ThinkPad P53.ThinkPad P73.ThinkPad P43s.ThinkPa ...

  9. Elasticsearch学习入门

    一.关于Elasticsearch 1.特点 Elasticsearch基于全文搜索引擎 Apache Lucene ,由Java开发而来,面向API进行搜索, Restful 风格,分布式文件存储. ...

  10. js - 获取当前年月日

    var date = new Date(); date .getYear(); //获取当前年份(2位) date .getFullYear(); //获取完整的年份(4位) date .getMon ...