Pagini recente » Cod sursa (job #2774865) | Cod sursa (job #1423364) | Cod sursa (job #973971) | Cod sursa (job #145556) | Cod sursa (job #1178428)
#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 (i=m;i>=1;i--)
{
if (rez[i]!=0 && i%(i-rez[i])==0)
{
g<<i<<'\n';
break;
}
}
if (i==0) g<<'0'<<'\n';
}
return 0;
}