Pagini recente » Cod sursa (job #2481662) | Cod sursa (job #1155389) | Cod sursa (job #2346221) | Cod sursa (job #2585865) | Cod sursa (job #614065)
Cod sursa(job #614065)
#include <fstream>
#include <string.h>
#define max_n 1000002
using namespace std;
int i,n,l[max_n],per[max_n],t,k,rez,j;
char s[max_n];
ifstream in("prefix.in");
ofstream out("prefix.out");
int main () {
in >> t;
for (j=1; j<=t; ++j) {
in >> (s+1);
n=strlen(s+1);
memset(l,0,sizeof(l));
memset(per,0,sizeof(per));
k=0;
rez=0;
for (i=2; i<=n; i++)
{
while (k!=0 && s[k+1]!=s[i]) k=l[k];
if (s[k+1]==s[i]) k++;
l[i]=k;
if (i==2*k) {
per[i]=k;
rez=i;
}
else
if (i<=2*k && per[k]==i-k) {
rez=i;
per[i]=i-k;
}
}
out << rez << '\n';
}
return 0;
}