Pagini recente » Cod sursa (job #392303) | Cod sursa (job #2080758) | Cod sursa (job #2457980) | Cod sursa (job #3247154) | Cod sursa (job #2457978)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("prefix.in");
ofstream out("prefix.out");
int t, ans;
char s[1000005];
int phi[1000005];
int main()
{
in >> t;
while(t--)
{
in >> (s + 1);
int n = strlen(s + 1);
phi[0] = phi[1] = 0;
for (int i = 2; i <= n; i++)
{
int x = i - 1;
while (s[phi[x] + 1] != s[i] && phi[x])
x = phi[x];
if (s[phi[x] + 1] == s[i])
phi[i] = phi[x] + 1;
else
phi[i] = 0;
}
ans = 0;
for (int i = n; i >= 1; i--)
if (phi[i] >= (i + 1) / 2 && s[i] == s[i - phi[i]])
{
ans = i;
break;
}
out << ans << '\n';
}
}