Pagini recente » Cod sursa (job #1931677) | Cod sursa (job #369373) | Cod sursa (job #3000986) | Cod sursa (job #1264542) | Cod sursa (job #614055)
Cod sursa(job #614055)
#include <fstream>
#include <cstring>
#define LMAX 1000005
using namespace std;
ifstream in("prefix.in");
ofstream out("prefix.out");
int LS, i, T, end, Phi[LMAX], LgPer[LMAX], LgMax = 0;
char S[LMAX];
int main()
{
in >> T;
for( ; T--; )
{
memset( Phi, 0, sizeof(Phi) );
memset( LgPer, 0, sizeof(LgPer) );
in >> (S+1);
LS = strlen(S+1);
end = LgMax = 0;
for( i = 2; i <= LS; ++i )
{
for( ; end && S[end+1] != S[i]; end = Phi[end] );
if( S[end+1] == S[i] ) ++end;
Phi[i] = end;
if( 2*end >= i && LgPer[end] == i - end )
{
LgMax = i;
LgPer[i] = i - end;
}
else if( 2*end == i )
{
LgMax = i;
LgPer[i] = end;
}
}
out << LgMax << '\n';
}
return 0;
}