首页 > 其他分享 >LG P5410 【模板】扩展 KMP(Z 函数)

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

时间:2023-05-16 16:11:42浏览次数:33  
标签:LG int text char getZ P5410 KMP strlen

\(\text{template}\)

注意 z[1]=n,从下标 \(2\) 开始求 z!!

\(\text{Code}\)

#include <bits/stdc++.h>
using namespace std;

typedef long long LL;

const int N = 2e7 + 5;
int z[N], p[N], n, m;
char a[N], b[N];

void getZ(char *s, int n, int *z) {
    for(int i = 2; i <= n; i++) z[i] = 0; z[1] = n;
    for(int 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 && s[z[i] + 1] == s[i + z[i]]) ++z[i];
        if (i + z[i] - 1 > r) r = i + z[i] - 1, l = i;
    }
}

void exkmp(char *s, int n, char *t, int m) {
    getZ(t, m, z);
    for(int 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 && t[p[i] + 1] == s[i + p[i]]) ++p[i];
        if (i + p[i] - 1 > r) r = i + p[i] - 1, l = i;
    }
}

int main() {
    scanf("%s%s", a + 1, b + 1), n = strlen(a + 1), m = strlen(b + 1), exkmp(a, n, b, m);
    LL ans = 0;
    for(int i = 1; i <= m; i++) ans ^= (LL)i * (z[i] + 1);
    printf("%lld\n", ans);
    ans = 0;
    for(int i = 1; i <= n; i++) ans ^= (LL)i * (p[i] + 1);
    printf("%lld\n", ans);
}

标签:LG,int,text,char,getZ,P5410,KMP,strlen
From: https://www.cnblogs.com/leiyuanze/p/17405952.html

相关文章

  • ubuntu22.04 ssh连接失败 userauth_pubkey: key type ssh-rsa not in PubkeyAcceptedA
    userauth_pubkey:keytypessh-rsanotinPubkeyAcceptedAlgorithms[preauth]sshd[14785]:error:Receiveddisconnectfromxxxxport45190:3:com.jcraft.jsch.JSchException:Authfail[preauth]OpenSSH从8.7以后版本开始默认不支持ssh-rsa签名的方式,需要手动设置解决......
  • 【LeetCode字符串#extra】KMP巩固练习:旋转字符串、字符串轮转
    旋转字符串https://leetcode.cn/problems/rotate-string/给定两个字符串,s和goal。如果在若干次旋转操作之后,s能变成goal,那么返回true。s的旋转操作就是将s最左边的字符移动到最右边。例如,若s='abcde',在旋转一次之后结果就是'bcdea'。示例1:输入:s="......
  • kmp算法详解
    相关题目链接:LeetCode28.找出字符串中第一个匹配项的下标代码如下funcstrStr(sstring,pstring)int{//kmp算法,下标一般从1开始,//next数组表示的是最长相等前后缀的长度,也就是最少移动几位,使得前后缀相等,//s是主串,p是模式串n:=len(s)m:=len(p)......
  • Java Test ENV setup for Algorithms, 4th Edition
    setjavaenv,add/home/linxu/myspace/java_projects/algs4/algs4.jartoCLASSPATHsudovim~/.bashrcexportJAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64exportPATH=$PATH:$JAVA_HOME/binexportCLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$JAVA_......
  • 五种开源协议的比较(BSD,Apache,GPL,LGPL,MIT)
    当Adobe、Microsoft、Sun等一系列巨头开始表现出对”开源”的青睐时,”开源”的时代即将到来!现今存在的开源协议很多,而经过OpenSourceInitiative组织通过批准的开源协议目前有58种。我们在常见的开源协议如BSD,GPL,LGPL,MIT等都是OSI批准的协议。如果要开源自己的代码,最好也是选......
  • LgcHMI
    LgcHMI介绍LgcHMI是个人开发的完全免费的界面组态动态链接库,目前支持松下/基恩士PLC通信,并支持公共协议opcua/modbusTcp,各种控件满足我们正常的开发需求。使用C#编程,相对于传统组态屏可扩展性更强,如果你不会编程,它也可以拖拖控件就可以完成了组态。需要的朋友可以到nuget或www.......
  • KMPlayer4.0播放器,去除播放窗口右侧的广告
    一【问题】每次运行KMPlayer播放器去除播放窗口右侧的广告 二【去除方法】1、打开路径:C:\Windows\System32\drivers\etc 2.用记事本打开hosts编辑,,在末尾加入  0.0.0.0cdn.kmplayer.com,,最后保存三、再次运行KMPlayer播放器:  ......
  • 线上FullGC问题排查实践——手把手教你排查线上问题
    作者:京东科技韩国凯一、问题发现与排查1.1找到问题原因问题起因是我们收到了jdos的容器CPU告警,CPU使用率已经达到104%观察该机器日志发现,此时有很多线程在执行跑批任务。正常来说,跑批任务是低CPU高内存型,所以此时考虑是FullGC引起的大量CPU占用(之前有类似情况,告知用户后重......
  • 聊一聊 Valgrind 监视非托管内存泄露和崩溃
    一:背景1.讲故事只要是程序总会出现各种莫名其妙的问题,比如:非托管内存泄露,程序崩溃,在Windows平台上一般用微软自家的官方工具AppVerifier就可以洞察,那问题出在Linux上怎么办呢?由于Linux崇尚自由,需要在各种牛鬼蛇神写的非官方开源软件中寻找一个比较靠谱的,比如本篇所说......
  • java.security.NoSuchAlgorithmException: Cannot find any provider supporting AES/
    Java使用AES/CBC/PKCS7Padding加解密时会报错,因为原生JDK不支持。1.在jdk中的jre\lib\security修改java.security文件,替换security.provider.7=org.bouncycastle.jce.provider.BouncyCastleProvider2./jdk/jre/lib/ext下添加jar包bcprov-jdk15on-1.58.jar ......