Pagini recente » Cod sursa (job #1140746) | Cod sursa (job #245525) | Cod sursa (job #1489992) | Cod sursa (job #1463225) | Cod sursa (job #2661544)
#include <fstream>
#include <cstring>
using namespace std;
ifstream f("prefix.in");
ofstream g("prefix.out");
int m,urm[1000005];
char s[1000005];
int kmp(char v[])
{
int i,k=0,n;
n=strlen(v);
urm[1]=0;
for(i=2;i<=n;i++)
{
while(k>0 && v[k]!=v[i-1])
k=urm[k];
if(v[i-1]== v[k]) k++;
urm[i]=k;
}
for(i=n;i>=1;i--)
if(urm[i]!=0 && i%(i-urm[i])==0) return i;
return 0;
}
int main()
{
int i;
f>>m;
f.get();
for(i=1;i<=m;i++)
{
f.getline(s,1000005);
g<<kmp(s)<<'\n';
}
return 0;
}