Pagini recente » Cod sursa (job #677646) | Cod sursa (job #631603) | Cod sursa (job #1967419) | Cod sursa (job #5316) | Cod sursa (job #568563)
Cod sursa(job #568563)
#include<fstream>
#include<vector>
using namespace std;
ifstream fin("prefix.in");
ofstream fout("prefix.out");
char A[1000001];
int t;
void Read();
void Prefix();
int main()
{
Read();
fin.close();
fout.close();
return 0;
}
void Read()
{
fin >> t;
for( int i = 1; i <= t; ++i )
{
A[0] = ' ';
fin >> A+1;
Prefix();
}
}
void Prefix()
{
vector<int> T(strlen(A)+ 1);
int lungime = 0;
T[1] = 0;
int pos = 0;
for( int i = 2; i <= strlen(A); ++i )
{
while( pos > 0 && A[i] != A[pos+1] )
pos = T[pos];
if( A[i] == A[pos+1] )
pos++;
T[i] = pos;
if( T[i] != 0 && i%(i-T[i]) == 0 )
lungime = i;
}
fout << lungime << '\n';
}