poj 2752 Seek the Name, Seek the Fame

总算对kmp有一点点了解了

next[j]表示1~j和len-j+1~len的字符相等,并且j!=i;


#include<iostream>
#include<cstring>
using namespace std;

char s[400004];
int len;
int p[400004];
int c[400004];
void init()
{
    int i,j;
    i=0;
    j=-1;
    p[0]=-1;
    while(i<len)
    {
        if(j==-1||s[i]==s[j])
        {
            p[++i]=++j;
        }
        else
            j=p[j];
    }
}

int main()
{
    while(cin>>s)
    {
        int k=0;
       int i,j;
       len=strlen(s);
       init(); 
       void kmp();
       i=len;
       while(p[i])
       {
           c[k++]=p[i];
            i=p[i];
       }
       for(j=k-1;j>=0;j--)
        {
            if(j==k-1)
           cout<<c[j];
            else
                cout<<' '<<c[j];
        }
       if(k==0)
       cout<<len<<endl;
       else
           cout<<' '<<len<<endl;
    }
}


阅读更多
文章标签: kmp
个人分类: acm
上一篇每一个优秀的人,都有一段沉默的时光
下一篇hdu 2087 减花布条 kmp
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭