Pagini recente » Cod sursa (job #3273944) | Cod sursa (job #402248) | Cod sursa (job #3210031) | Cod sursa (job #1444576) | Cod sursa (job #1277385)
#include <cstring>
#include <fstream>
#include <vector>
#include <cstdlib>
using namespace std ;
const int NMAX = 1000005 ;
const int INF = 0x3f3f3f3f ;
ifstream fin("prefix.in") ;
ofstream fout("prefix.out") ;
int A[NMAX] ;
char C[NMAX] ;
int sol = 0 ;
int T ;
int main()
{
fin >> T ;
fin.get() ;
while( T --)
{
fin >> C + 1;
A[1] = 0 ;
for(int i = 2 ; C[i] != NULL; ++ i)
{
int actual = A[i - 1] ;
while(actual && C[i] != C[actual + 1])
actual = A[actual] ;
if(C[i] == C[actual + 1])
A[i] = actual + 1 ;
else A[i] = 0 ;
}
sol = 0 ;
for(int i = strlen(C + 1) ; i >= 1; -- i)
if(A[i] != i && A[i] != 0 && i % (i - A[i]) == 0)
{
sol = i ;
break ;
}
fout << sol << '\n' ;
}
fin.close() ;
fout.close() ;
return 0 ;
}