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