uva 1328(kmp)
阿新 • • 發佈:2017-08-25
pri pan .... space pre print name 延伸 const
被打哭了......神特麽kmp,還能這麽用!看來我理解的還不夠透徹,這裏最神奇的就是只有相同的字串才能往下延伸,而"i-f[i]"就正好是前面空出來的模板塊,也就是f[i]中不計數的那塊,而字符串都是從0開始的,對應的往下加一個卻正好成立構成倍數關系
#include <iostream> #include <cstring> #include <cstdio> #include <algorithm> using namespace std; const int maxn=1000000+100; int f[maxn]; string p; int n;int main() { int kase=0; while(~scanf("%d",&n)&&n) { kase++; cin >> p; f[0]=0,f[1]=0; for(int i=1; i<n; i++) { int j=f[i]; while(j&&p[i]!=p[j]) j=f[j]; f[i+1]=(p[i]==p[j]?j+1:0); } printf("Test case #%d\n",kase); for(int i=2; i<=n; i++) if(f[i]>0&&i%(i-f[i])==0) { printf("%d %d\n",i,i/(i-f[i])); } printf("\n"); } return 0; }
,很神奇,這是什麽,規律?
uva 1328(kmp)