Pagini recente » Cod sursa (job #1708507) | Cod sursa (job #1025671) | Cod sursa (job #2255167) | Cod sursa (job #2331859) | Cod sursa (job #1178429)
#include<fstream>
#include<cstring>
using namespace std;
char P[1000005];
int rez[1000005];
int m,t;
void prefix()
{
int k=0;
rez[1]=0;
for (int q=2;q<=m;++q)
{
while (k>0 && P[k+1]!=P[q]) k=rez[k];
if (P[k+1]==P[q]) ++k;
rez[q]=k;
}
}
int main()
{
int i,j;
ifstream f("prefix.in");
ofstream g("prefix.out");
f>>t;f.get();
for (i=1;i<=t;++i)
{
f.getline(P+1,1000000);
m=strlen(P+1);
memset(rez,0,sizeof(rez));
prefix();
for (j=m;j>=1;j--)
{
if (rez[j]!=0 && j%(j-rez[j])==0)
{
g<<j<<'\n';
break;
}
}
if (j==0) g<<'0'<<'\n';
}
return 0;
}