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

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

题目描述

给定两个字符串 a , b a,b a,b,你要求出两个数组:

  • b b b z z z 函数数组 z z z,即 b b b b b b 的每一个后缀的 LCP 长度。
  • b b b a a a 的每一个后缀的 LCP 长度数组 p p p

对于一个长度为 n n n 的数组 a a a,设其权值为 xor ⁡ i = 1 n i × ( a i + 1 ) \operatorname{xor}_{i=1}^n i \times (a_i + 1) xori=1ni×(ai+1)

输入格式

两行两个字符串 a , b a,b a,b

输出格式

第一行一个整数,表示 z z z 的权值。

第二行一个整数,表示 p p p 的权值。

样例 #1

样例输入 #1

aaaabaa
aaaaa

样例输出 #1

6
21

提示

样例解释:

z = { 5 4 3 2 1 } z = \{5\ 4\ 3\ 2\ 1\} z={5 4 3 2 1} p = { 4 3 2 1 0 2 1 } p = \{4\ 3\ 2\ 1\ 0\ 2\ 1\} p={4 3 2 1 0 2 1}


数据范围:

对于第一个测试点, ∣ a ∣ , ∣ b ∣ ≤ 2 × 1 0 3 |a|,|b| \le 2 \times 10^3 a,b2×103

对于第二个测试点, ∣ a ∣ , ∣ b ∣ ≤ 2 × 1 0 5 |a|,|b| \le 2 \times 10^5 a,b2×105

对于 100 % 100\% 100% 的数据, 1 ≤ ∣ a ∣ , ∣ b ∣ ≤ 2 × 1 0 7 1 \le |a|,|b| \le 2 \times 10^7 1a,b2×107,所有字符均为小写字母。

思路:

扩展 KMP版题,不会的可以看看这篇题解,讲的很好哦ヾ(≧▽≦*)o
超级好题解

代码

#include<bits/stdc++.h>
using namespace std;
long long ans,cnt,nxt[20000010],ext[20000010];
string a,b;
void getZ(string s){int k=1,len=s.size();nxt[0]=len;int p=0;while(p+1<len&&s[p]==s[p+1]) p++;nxt[1]=p;for(int i=2;i<len;i++){int p=nxt[k]+k-1;int l=nxt[i-k];if(i+l<=p) nxt[i]=l;else{int j=max(0,p-i+1);while(i+j<len&&s[i+j]==s[j]) j++;nxt[i]=j;k=i;}}
}void exkmp(string a,string b){int k=0;int la=a.size();int lb=b.size();int p=0;while(p<la&&p<lb&&a[p]==b[p]) p++;ext[0]=p;for(int i=1;i<la;i++){int p=ext[k]+k-1;int l=nxt[i-k];if(i+l<=p) ext[i]=l;else{int j=max(0,p-i+1);while(i+j<la&&j<lb&&a[i+j]==b[j]) j++;ext[i]=j;k=i;}}
}
int main(){cin>>a>>b;getZ(b);exkmp(a,b);for(int i=0;i<b.size();i++){ans^=(i+1)*(nxt[i]+1);}for(int i=0;i<a.size();i++){cnt^=(i+1)*(ext[i]+1);}cout<<ans<<endl;cout<<cnt;return 0;
} 

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

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

相关文章

关于“Python”的核心知识点整理大全37

目录 13.6.2 响应外星人和飞船碰撞 game_stats.py settings.py alien_invasion.py game_functions.py ship.py 注意 13.6.3 有外星人到达屏幕底端 game_functions.py 13.6.4 游戏结束 game_stats.py game_functions.py 13.7 确定应运行游戏的哪些部分 alien_inva…

C#学习笔记 - C#基础知识 - C#从入门到放弃 - C# 结构、类与属性

C# 入门基础知识 - C# 结构、类与属性 第9节 结构、类与属性9.1 结构的使用9.2 枚举9.3 面向对象概述9.4 类与对象的关系9.5 类的声明9.6 属性的使用9.6.1 属性9.6.2 属性使用 9.7 构造函数和析构函数9.7.1 构造函数9.7.2 析构函数 9.8 类的继承9.9 类的封装9.10 类的多态 更多…

非阻塞 IO(NIO)

文章目录 非阻塞 IO(NIO)模型驱动程序应用程序模块使用 非阻塞 IO(NIO) 上一节中 https://blog.csdn.net/tyustli/article/details/135140523&#xff0c;使用等待队列头实现了阻塞 IO 程序使用时&#xff0c;阻塞 IO 和非阻塞 IO 的区别在于文件打开的时候是否使用了 O_NONB…

Zookeeper的学习笔记

Zookeeper概念 Zookeeper是一个树形目录服务&#xff0c;简称zk。 Zookeeper是一个分布式的、开源的分布式应用程序的协调服务 Zookeeper提供主要的功能包括&#xff1a;配置管理&#xff0c;分布式锁&#xff0c;集群管理 Zookeeper命令操作 zk数据模型 zk中的每一个节点…

15-高并发-如何扩容

对于一个发展初期的系统来说&#xff0c;不太确定商业模型到底行不行&#xff0c;最好的办法是按照最小可行产品方法进行产品验证&#xff0c;因此&#xff0c;刚开始的功能会比较少&#xff0c;是一个大的单体应用&#xff0c;一般按照三层架构进行设计开发&#xff0c;使用单…

数字信号的理解

1 数字信号处理简介 数字信号处理 digital signal processing&#xff08;DSP&#xff09;经常与实际的数字系统相混淆。这两个术语都暗示了不同的概念。数字信号处理在本质上比实际的数字系统稍微抽象一些。数字系统是涉及的硬件、二进制代码或数字域。这两个术语之间的普遍混…

理解按需自动导入 unplugin-auto-import unplugin-vue-components

文章目录 unplugin-auto-import基础使用构建工具引入插件配置插件 import&#xff1a;配置自动导入规则使用预设自动引入第三方库自动导入 TypeScript 类型vue 预设的自动导入配置 dts&#xff1a;让编辑器环境识别 ts 类型eslintrc&#xff1a;解决 eslint 检查错误dirs&#…

使用PE信息查看工具和Dependency Walker工具排查因为库版本不对导致程序启动报错问题

目录 1、问题说明 2、问题分析思路 3、问题分析过程 3.1、使用Dependency Walker打开软件主程序&#xff0c;查看库与库的依赖关系&#xff0c;查看出问题的库 3.2、使用PE工具查看dll库的时间戳 3.3、解决办法 4、最后 VC常用功能开发汇总&#xff08;专栏文章列表&…

链表常见题型(1)

1.反转链表 1.1反转链表 如果我们想要反转链表&#xff0c;那应该有head的next指针指向空&#xff0c;其余结点的next指针反过来&#xff0c;指向它的上一个结点&#xff0c;那我们在执行该操作的时候就需要定义变量cur(current)表示我们当前遍历到的结点&#xff0c;变量pre(…

【后台报错】插入时sql报错,varchar撑爆

后台的一个报错。按照正常的需要复现&#xff0c;或者查一下日志。但是凭借多年经验和大胆猜测&#xff0c;以及对自己代码要自信 引用一下文章 目测7*15 105项。每个id有9个数字加上分隔符刚好十个。大概就是超过了定义的一千的varchar长度。直接改数据库就好了。 简单粗暴…

【ARMv8M Cortex-M33 系列 1.1 -- SAU Non-secure Callable(NSC) 介绍 】

文章目录 SAU NSC 介绍安全状态&#xff08;Secure state&#xff09;非安全状态&#xff08;Non-secure state&#xff09;非安全可调用&#xff08;Non-secure Callable, NSC&#xff09;区域NSC 介绍 配置 NSC SAU NSC 介绍 ARMv8-M 架构引入了 TrustZone 技术&#xff0c;…

【金猿CIO展】乖宝宠物CIO王天刚:以数据为核心,转变业务模式

‍ 王天刚 本文由乖宝宠物CIO王天刚撰写并投递参与“数据猿年度金猿策划活动——2023大数据产业年度趋势人物榜单及奖项”评选。 大数据产业创新服务媒体 ——聚焦数据 改变商业 随着社会经济的快速发展&#xff0c;“宠物经济”悄然崛起&#xff0c;宠物在家中的角色地位有时…

c语言:计算1+2+3……+n的和|练习题

一、题目 输入一个数n&#xff0c;计算123……n的和 二、代码截图【带注释】 三、源代码【带注释】 #include int main() { int num0; printf("请输入要运算的数:"); scanf("%d",&num); sumResult(num);//相加结果函数 } //计算打印…

【智能家电】东胜物联离在线语音方案为厨电企业赋能,实现厨房智能化控制

近年来&#xff0c;我国厨电市场蓬勃发展。据行业统计数据显示&#xff0c;至今年6月&#xff0c;市场规模已达356亿元&#xff0c;同比增长8.8%。随着数字科技、物联网和人工智能的兴起&#xff0c;厨电产品正在朝着更智能、多功能化的方向迅速发展。 为此厨电厂商正在积极布…

electron-vue的webview详解及案例代码

概述 Electron-Vue中的WebView组件是一种用于在Electron应用程序中嵌入网页的组件。WebView组件允许您在Electron应用程序中呈现网页内容,并且可以与Vue组件进行交互。 使用WebView组件,您可以将网页内容嵌入到Electron应用程序中,并使用Vue组件来控制和管理WebView的内容…

同城按摩预约上门SPA程序源码下载

这套源码是用aspmdb开发的&#xff0c;目前已用在多个项目上&#xff1a;泰美妙&#xff0c;康悦到家&#xff0c;东郊到家&#xff0c;汇美到家&#xff0c;往约到家&#xff0c;泰到位&#xff0c;康派到家&#xff0c;易点到家&#xff0c;茜师到家&#xff0c;泽沐到家 &am…

EarMaster Pro 7 简体中文破解版 v7.2.0.42 电脑版

软件介绍 EarMaster破解版一款功能强大的专业级别多媒体音乐教育学习软件&#xff0c;EarMaster破解版提供了大量音乐相关的学习内容&#xff0c;用户在这里可以学习基础的和弦、音阶、节奏&#xff0c;也可以提升自己的音感&#xff0c;如果基础已经很扎实了&#xff0c;还可…

加拿大 ANUSPLIN 网格气候数据集

ANUSPLIN 网格气候数据集 加拿大 ANUSPLIN 网格气候数据集是使用澳大利亚国立大学样条 (ANUSPLIN) 模型生成的基于站点的插值数据集。它由加拿大农业和农业食品部生产&#xff0c;覆盖加拿大全境。该数据集提供 1950 年至 2015 年期间每日和每月时间步长的最高气温、最低气温和…

trtc-electron-sdk的demo中添加更新功能以及出现的报错问题

1、官网demo下载地址 点击下载 按照官网demo说明文档进行安装和运行 2、添加electron-updater npm install electron-updater根据项目需求安装对应的版本&#xff0c;建议使用5.2.1 3、创建一个handleUpdater.js文件&#xff0c;和package.json同级 // const { ipcMain } …

OpenFeign 万字教程详解

OpenFeign 万字教程详解 目录 一、概述 1.1.OpenFeign是什么&#xff1f;1.2.OpenFeign能干什么1.3.OpenFeign和Feign的区别1.4.FeignClient 二、OpenFeign使用 2.1.OpenFeign 常规远程调用2.2.OpenFeign 微服务使用步骤2.3.OpenFeign 超时控制2.4.OpenFeign 日志打印2.5.O…