Pagini recente » Cod sursa (job #1876643) | Cod sursa (job #2271479) | Cod sursa (job #1107036) | Cod sursa (job #372920) | Cod sursa (job #2445929)
#include <cstring>
#include <fstream>
#include <iostream>
using namespace std;
ifstream fin ("prefix.in");
ofstream fout ("prefix.out");
const int MAXN =1e6 + 5;
int Z[MAXN],n,t;
char T[MAXN];
void getZarr( )
{
int L, R, k;
L = R = 0;
for (int i = 1; i < n; ++i)
{
if (i > R)
{
L = R = i;
while (R<n && T[R-L] == T[R])
R++;
Z[i] = R-L;
R--;
}
else
{
k = i-L;
if (Z[k] < R-i+1)
Z[i] = Z[k];
else
{
L = i;
while (R<n && T[R-L] == T[R])
R++;
Z[i] = R-L;
R--;
}
}
}
}
int main() {
fin >> t;
for ( ; t > 0; --t) {
fin >> (T);
n = strlen(T);
getZarr();
int ma = 0;
for ( int i = 0; i < n; ++i) {
if ( Z[i] >= i)
ma = max(ma,2*i);
}
fout << ma << "\n";
}
}