您的位置:首页 > 其它

POJ 2406-巧用next数组

2017-07-26 15:47 190 查看
原题

这道题我还没弄懂 但是看了看题解把代码写出来并且A掉了…

#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int n,next[10000010];
char s[10000010];
void get_next(const char s[],int next[]){
next[0]=0;
for(int i=1,k=0;i<n;++i){
while(k>0&&s[k]!=s[i])k=next[k-1];
if(s[k]==s[i])k++;
next[i]=k;
}
return ;
}
int main(){
scanf("%s",s);
while(s[0]!='.'){
n=strlen(s);
get_next(s,next);
//

//cout<<next[n-1];
if(n%(n-next[n-1])==0)printf("%d\n",n/(n-next[n-1]));
else printf("1\n");
scanf("%s",s);
}
return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: