Pagini recente » Cod sursa (job #2982624) | Cod sursa (job #795627) | Cod sursa (job #1636885) | Cod sursa (job #1131794) | Cod sursa (job #1655487)
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
ifstream in("prefix.in");
ofstream out("prefix.out");
const int NMAX = 1000001;
int n,t,length,last,ok;
char a[NMAX];
int ps[NMAX];
int best = 0;
int nr = 0;
void create_table()
{
int k = 0;
ps[1] = 0;
for(int j=2;j<=n;j++)
{
while(k>0 && a[k+1]!=a[j])
k = ps[k];
if(a[k+1]==a[j])
k++;
ps[j] = k;
if(ps[j]+ps[j]==j && best < j)
best = j;
}
length = ps[best];
}
int main()
{
in>>t;
for(int i=1;i<=t;i++)
{
in>>(a+1);
a[0] = '0';
best = 0;
n = strlen(a)-1;
create_table();
if(best > 1)
{
ok = 1;
last = length;
nr = 1;
while(ok)
{
for(int j=last+1;j<=last+length;j++)
{
if(a[j]!=a[j-last])
ok = 0;
if(!ok)
break;
}
if(ok)
{
last+=length;
nr++;
}
}
out<<nr*length<<"\n";
}
else
out<<0<<"\n";
}
in.close();
out.close();
return 0;
}