用NEXT数组的性质 ,NEXT数组的值表示该位置下与前缀相同的位数。
cur[ i ] 储存 前缀 i 个字母与S串相同的数量。
#include#include #define MAX 100010char s[100010];long long next[100010],cur[100010];long long len,sum;void getnext(){ long long i=0,j=-1; next[0]=j; while(i 0) cur[i]+=cur[next[i]]+1;//想到这步就好了。 else cur[i]=1; sum+=cur[i]; } printf("%lld\n",sum); } return 0; }