1. 程式人生 > >[Poj2752]Seek the name,Seek the fame

[Poj2752]Seek the name,Seek the fame

using see .org ret bsp std 所有 http n)

原題鏈接:http://poj.org/problem?id=2752

題目大意就是給你一個字符串,然後求出所有前綴與後綴相同的字符串長度

可以采用Hash,但是個人認為比較麻煩,於是直接上KMP

正好拿模板提練練KMP,其實只有求nxt數組的那一部分

需要註意的是有多組數據,所以需要判斷EOF,而且poj不支持萬能頭...只好打了基本的幾個庫

code:

#include<cstring>
#include<cstdio>
using namespace std;
char s[400010];
int n,p[400010],j;
int ans[400010],m;
int main(){ while(scanf("%s",s+1)!=EOF){ memset(p,0,sizeof(p)); j=0;m=0; n=strlen(s+1); for(int i=1;i<=n;i++){ while(j&&s[i+1]!=s[j+1]) j=p[j]; if(s[j+1]==s[i+1]) j++; p[i+1]=j; } int now=n;
while(p[now]){ ans[++m]=p[now]; now=p[now]; } for(int i=m;i>=1;i--) printf("%d ",ans[i]); printf("%d\n",n); } return 0; }

[Poj2752]Seek the name,Seek the fame