Pagini recente » Cod sursa (job #262539) | Cod sursa (job #1225700) | Cod sursa (job #1405463) | Cod sursa (job #3228601) | Cod sursa (job #1094835)
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin("prefix.in");
ofstream fout("prefix.out");
char s[1000002];
int pi[1000002],fr[1000002];
int n,maxv,k,t;
int main()
{
fin>>t;
for (;t; --t)
{
fin>>(s+1);
n = strlen(s+1);
memset (pi,0,sizeof(pi));
memset (fr,0,sizeof(fr));
pi[1] = 0;
fr[1] = 1;
k = 0;
maxv = 0;
for (int i=2; i<=n; ++i)
{
while (s[i]!=s[k+1] && k != 0)
k = pi[k];
if (s[i]==s[k+1])
pi[i] = ++k;
if (i-k == fr[k])
{
fr[i] = fr[k];
maxv = i;
}
else fr[i] = i;
}
fout<<maxv<<"\n";
}
}