Cod sursa(job #2362080)
| Utilizator | Data | 2 martie 2019 21:47:52 | |
|---|---|---|---|
| Problema | Prefix | Scor | 100 |
| Compilator | cpp-64 | Status | done |
| Runda | Arhiva de probleme | Marime | 0.67 kb |
#include <bits/stdc++.h>
using namespace std ;
ifstream in ("prefix.in") ;
ofstream out ("prefix.out") ;
const int NR = 1000003 ;
int t , n , l , i , best ;
char s [ NR ] ;
int p [ NR ] ;
int main()
{
in >> t ;
while ( t -- )
{
best = 0 ;
l = 0 ;
in >> s + 1 ;
n = strlen( s + 1 ) ;
p [ 1 ] = 0 ;
for ( i = 2 ; i <= n ; ++ i )
{
while ( l && s [ i ] != s [ l + 1 ] ) l = p [ l ] ;
if ( s [ i ] == s [ l +1 ] ) l ++ ;
p [ i ] = l ;
if ( l && l % ( i - l ) == 0 ) best = i ;
}
out << best << '\n' ;
}
}
