社区讨论
WA22pts球跳
P5410【模板】扩展 KMP / exKMP(Z 函数)参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mk9qhpj4
- 此快照首次捕获于
- 2026/01/11 20:52 2 个月前
- 此快照最后确认于
- 2026/01/15 23:55 2 个月前
CPP
#include<bits/stdc++.h>
using namespace std;
const int N=2e7+5;
using ll=long long;
char a[N],b[N];
int na,nb,r,l;
ll z[N],p[N],ans;
int main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
cin>>(a);cin>>(b);
na=strlen(a),nb=strlen(b);
z[0]=nb;l=1;r=0;
while(r+1<nb&&b[r]==b[1+r]) r++;
z[1]=r;
for(int i=2;i<nb;i++){
if(i+z[i-l]<=r) z[i]=z[i-l];
else{
z[i]=max(0ll,r-ll(i)+1);
while(b[z[i]+i]==b[z[i]]&&z[i]+i<nb) z[i]++;
l=i;r=l+z[l]-1;
}
}
for(int i=0;i<nb;i++) ans^=((i+1)*(z[i]+1));
cout<<ans<<'\n';ans=0;
l=r=0;
while(r<na&&r<nb&&a[r]==b[r]) r++;
p[0]=r;
for(int i=1;i<na;i++){
if(i+z[i-l]<=r) p[i]=z[i-l];
else{
p[i]=max(0ll,r-ll(i)+1);
while(p[i]+i<na&&p[i]<nb&&a[p[i]+i]==b[p[i]]) p[i]++;
l=i;r=l+p[l]-1;
}
}
for(int i=0;i<na;i++) ans^=((i+1)*(p[i]+1));
cout<<ans;
return 0;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...