Pagini recente » Cod sursa (job #187950) | Cod sursa (job #2453619) | Cod sursa (job #1735189) | Cod sursa (job #1335472) | Cod sursa (job #1207779)
#include<fstream>
#include<cstring>
using namespace std;
const int NMAX=1000005;
int t,dp[NMAX];
char s[NMAX];
int main()
{
int i,len,maxim,dr;
ifstream fin("prefix.in");
ofstream fout("prefix.out");
fin>>t;
while (t--)
{
fin>>(s+1);
len=strlen(s+1);
dp[1]=0;maxim=0;
for (i=2;i<=len;i++)
{
if (s[dp[i-1]+1]==s[i]) dp[i]=dp[i-1]+1;
else
{
dr=dp[i-1];
while (dr && s[dr+1]!=s[i]) dr=dp[dr];
dp[i]=0;
if (s[dr+1]==s[i]) dp[i]=dr+1;
}
if (dp[i]>=(i/2) && i%(i-dp[i])==0) maxim=max(maxim,i);
}
fout<<maxim<<"\n";
}
return 0;
}