bnuoj 50394 Censor

来源:互联网 发布:身份证被别人注册淘宝 编辑:程序博客网 时间:2024/06/16 17:37

 

        kmp变形,只要记录每次删完后的位置,然后通过存放位置的数组回溯到那个位置即可!!

#include<iostream>#include<string>#include<string.h>#include<stdio.h>using namespace std;int n,m,j,p[5000005];int next1[5000005];char a[5000005],s[5000005],ss[5000005];void mn(){     int k=-1,j=0;;      next1[0]=-1;      while(s[j]!='\0')      {          if(k==-1||s[k]==s[j])          {              k++;              j++;              next1[j]=k;          }          else              k=next1[k];       }}void sm(){    j=0;    for(int k=0,i=0;i<m;i++)    {        a[j]=ss[i];        while(k!=-1&&s[k]!=a[j])            k=next1[k];        j++;        k++;        p[j]=k;        if(k==n)        {            j-=k;            k=p[j];        }    }}int main(){    while(scanf("%s %s", s,ss)!= EOF)    {        n=strlen(s);        m=strlen(ss);        mn();        sm();        for(int i=0;i<j;i++)            cout<<a[i];        cout<<"\n";    }    return 0;}


 


 

 

0 0
原创粉丝点击