Pagini recente » Cod sursa (job #2325366) | Cod sursa (job #2298508) | Cod sursa (job #132932) | Diferente pentru implica-te/arhiva-educationala intre reviziile 223 si 115 | Cod sursa (job #733517)
Cod sursa(job #733517)
#include <fstream>
#include <cstring>
using namespace std;
const int N=1000005;
int p[N];
char s[N];
ifstream in("prefix.in");
ofstream out("prefix.out");
int prefix(char s[])
{
memset(p,0,sizeof(p));
int n=strlen(s+1);
p[0]=-1;
for (int i=2;s[i];i++)
for (int j=p[i-1];j>=0;j=p[j])
if (s[j+1]==s[i])
{
p[i]=j+1;
break;
}
for (int i=n;i;i--)
if (p[i] && i%(i-p[i])==0)
return i;
return 0;
}
int main()
{
int t;
in>>t;
while (t--)
{
in>>s+1;
out<<prefix(s)<<"\n";
}
return 0;
}