Pagini recente » Borderou de evaluare (job #694294) | Cod sursa (job #3137559) | Borderou de evaluare (job #185859) | Borderou de evaluare (job #2034148) | Cod sursa (job #2504316)
#include <iostream>
#include <fstream>
#include <string.h>
#include <stdlib.h>
using namespace std;
ifstream in ("prefix.in");
ofstream out("prefix.out");
char s[1000010];
int lps[1000010], lenfin, len, t, dif;
int main()
{
in.getline(s, 1000001); t=atoi(s);
s[0]=' ';
while(t--)
{
in.getline(s+1, 1000001);
lps[1]=lenfin=0; len=0;
for(int i=2; s[i]!='\0'; i++)
{
while(s[len+1]!=s[i]&&len>0)
len=lps[len];
if(s[len+1]==s[i])
len++;
lps[i]=len; dif=i-len;
if(len!=0&&i%dif==0)
lenfin=i;
}
out<<lenfin<<"\n";
}
return 0;
}