poj 2752
题意:给你一个串,如果这个串存在一个长度为n的前缀串,和长度为n的后缀串,并且这两个串相等,则输出他们的长度n。求出所有的长度n。
代码:
#include<iostream>
#include<fstream>
using namespace std;
char c[400003];
int next[400004];
int len;
void getnext(){
int i,j,k;
j=0;k=-1;
next[0]=-1;
while(j<len)
{
if(k==-1||c[j]==c[k])
next[++j]=++k;
else
k=next[k];
}
}
void solve(int s){
if(s!=0)
{
solve(next[s]);
cout<<s<<' ';
}
}
void read(){
// ifstream cin("in.txt");
int i,j,k;
while(cin>>c)
{
len=strlen(c);
getnext();
solve(next[len]);
cout<<len<<endl;
}
}
int main(){
read();
return 0;
}
浙公网安备 33010602011771号