Pagini recente » Cod sursa (job #797347) | Cod sursa (job #1264455) | Cod sursa (job #2837637) | Cod sursa (job #317314) | Cod sursa (job #2306491)
#include <fstream>
#include <string>
#include <vector>
#define lim 1000004
using namespace std;
ifstream f("prefix.in");
ofstream g("prefix.out");
int t,pre[lim],lm,maxim;
string s;
vector <int> fr[lim];
void prefix (void)
{
int j=0;
for (int i=2;i<=s.length();i++)
{
while (j && s[j+1]!=s[i]) j=pre[j];
if (s[j+1]==s[i]) j++;
pre[i]=j;
}
}
int main()
{
f>>t;
while (t--)
{
f>>s;
int ns=s.length();
maxim=0;
for (int i=ns-1;i>=0;i--)
{
s[i+1]=s[i];
pre[i+1]=0;
}
prefix();
for (int i=1;i<=ns;i++)
if (pre[i] && i%(i-pre[i])==0) maxim=i;
g<<maxim<<'\n';
}
f.close();
g.close();
return 0;
}