Cod sursa(job #2910416)

Utilizator andrei_marciucMarciuc Andrei andrei_marciuc Data 20 iunie 2022 20:34:07
Problema Prefix Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.52 kb
#include <fstream>
using namespace std;

ifstream fin( "prefix.in" );	
ofstream fout( "prefix.out" );
	
int kmp[ 1000005 ];
string s;	

void solve() {	
	fin >> s;
	s = "#" + s;
	kmp[ 1 ] = 0;
	int ans = 0, q = 0;
	int i = 2;
	while( i <= s.length() ){
		while( q && s[ q + 1 ] != s[ i ] )
			q = kmp[ q ];
		if( s[ q + 1 ] == s[ i ] )
			q++;
		kmp[ i ] = q;
		if( kmp[ i ] && ( kmp[ i ] % ( i - kmp[ i ] ) == 0 ) )
			ans = i;
		i++;
	}
	fout << ans << '\n';	
}
	
int main()	
{
	int t;
	fin >> t;
	while( t-- )
		solve();
	return 0;
	
}