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;
}