51nod 1277 字符串中的最大值

来源:互联网 发布:linux shell 等待 编辑:程序博客网 时间:2024/04/30 05:38

KMP算法的玄妙应用。

对于起点不为0,终点为i的字符串,如果可以利用d[i]将其对应到起点为0的相等的字符串上。

#include <bits/stdc++.h>using namespace std;const int MAXN=100100;char s[MAXN];int f[MAXN],d[MAXN];void KMP(){int i,j,len=strlen(s);d[0]=-1; i=-1; j=0;while(j<=len){if(i==-1||s[i]==s[j]){i++;j++;d[j]=i;}elsei=d[i];}}int main(){long long len,i,ans;while(~scanf("%s",&s)){KMP();len=strlen(s);memset(f,0,sizeof(f));for(i=len;i>1;i--){f[i]++;f[d[i]]+=f[i];}ans=0;for(i=1;i<=len;i++)ans=max(ans,i*f[i]);printf("%lld\n",ans);}}


0 0