RiverSheepSHEEP

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

奔跑的心634·2022-02-22 12:48·28 次阅读

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

Code#

Copy
#include<cstdio> #include<cstring> #include<algorithm> #define LL long long using namespace std; const int N = 2e7 + 5; LL z[N],p[N]; char a[N],b[N]; int main() { scanf("%s%s",a + 1,b + 1); int la = strlen(a + 1),lb = strlen(b + 1); for (int i = 2,l = 0,r = 0; i <= lb; i++) { z[i] = (i <= r ? min(z[i - l + 1],(LL)r - i + 1) : 0); while (i + z[i] <= lb && b[z[i] + 1] == b[z[i] + i]) z[i]++; if (i + z[i] - 1 > r) r = i + z[i] - 1,l = i; } z[1] = lb; LL Z = 0,P = 0; for (int i = 1; i <= lb; i++) Z ^= (LL)i * (z[i] + 1LL); printf("%lld\n",Z); for (int i = 1,l = 0,r = 0; i <= la; i++) { p[i] = (i <= r ? min(z[i -l + 1],(LL)r - i + 1): 0); while (i + p[i] <= la && p[i] < lb && a[i + p[i]] == b[p[i] + 1]) p[i]++; if (i + p[i] - 1 > r) r = i + p[i] - 1,l = i; } for (int i = 1; i <= la; i++) P ^= (LL)i * (p[i] + 1LL); printf("%lld\n",P); }
posted @   RiverSheep  阅读(28)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示
目录