您的位置:首页 > 其它

hdu6629 2019多校5 拓展KMP 模板题

2019-08-09 10:49 92 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/qq_43279710/article/details/98944272

hdu6629
坑点:完全匹配不需要加匹配错误的1次
其余就是模板s的所有后缀子串与s的最大前缀

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e6 + 10;
typedef long long ll;
char s[N];
int nex[N],extend[N];
ll sum;
void get_next()
{
int len = strlen(s);
nex[0] = len;
int mx = 0,id;
for(int i = 1;i < len;i++)
{
if(i < mx) nex[i] = min(mx-i,nex[i-id]);
else nex[i] = 0;
while(s[i+nex[i]] == s[nex[i]]) nex[i]++;
if(mx < i + nex[i])
{
id = i;
mx = i + nex[i];
}

sum += (ll)min(nex[i]+1,len-i);
}
}
int main()
{
int T;
scanf("%d",&T);
while(T--){
scanf("%s",s);
sum = 0;
get_next();
ll n = strlen(s);
printf("%lld\n",sum);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: