Pagini recente » Cod sursa (job #1229661) | Cod sursa (job #658859) | Cod sursa (job #227507) | Cod sursa (job #3277598)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("prefix.in");
ofstream fout("prefix.out");
int lps[1000001];
string s;
void tcase()
{
fin>>s;
int ssize=s.size();
int len=0,ans=0;
fill(lps,lps+ssize,0);
for(int i=1;i<ssize;i++)
{
if(s[i]==s[len])
{
len++;
lps[i]=len;
if(i+1==lps[i]*2)
ans=i+1;
}
else if(len)
{
len=lps[len-1];
i--;
}
}
string target;
for(int i=0;i<ans/2;i++)
target+=s[i];
len=0;
for(int i=ans;i<ssize;i++)
{
if(s[i]==target[len])
{
len++;
if(len==target.size())
{
ans+=target.size();
len=0;
}
}
else break;
}
fout<<ans<<'\n';
}
int main()
{
int tc;
fin>>tc;
while(tc--)
tcase();
return 0;
}