hdu2594(KMP水题)

来源:互联网 发布:php hmacsha256 编辑:程序博客网 时间:2024/05/19 02:02

把俩串联在一起,用‘#’隔开,答案就是fail[n]

#include <cstdio>#include <cstring>#define N 50010char s[N<<1],s2[N];int n,fail[N<<1];inline void getfail(){int k=0;fail[1]=0;for(int i=2;i<=n;++i){while(k&&s[k+1]!=s[i]) k=fail[k];if(s[k+1]==s[i]) ++k;fail[i]=k;}}int main(){//freopen("a.in","r",stdin);while(scanf("%s%s",s+1,s2+1)!=EOF){n=strlen(s+1);int len=strlen(s2+1);s[++n]='#';for(int i=1;i<=len;++i) s[++n]=s2[i];s[n+1]=0;getfail();if(fail[n]==0) puts("0");else printf("%s %d\n",s+n-fail[n]+1,fail[n]);}return 0;}


原创粉丝点击