Pagini recente » Cod sursa (job #2930310) | Cod sursa (job #1273055) | Borderou de evaluare (job #957100) | Cod sursa (job #2639917) | Cod sursa (job #799986)
Cod sursa(job #799986)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("prefix.in");
ofstream out("prefix.out");
int t[1111111];
char s[1111111];
inline bool perioada(int n)
{
int k=n-t[n];
if(n%k==0 && n/k!=1)
return true;
return false;
}
void solve()
{
int i,p=0,maxim=0,k=0;
in.getline(s+1,1111111);
t[1]=-1;
for(i=2;s[i];++i)
{
while(k && s[i]!=s[k+1])
k=t[k];
if(s[i]==s[k+1])
++k;
t[i]=k;
}
for(i--;i;i--)
if (perioada(i))
{
out<<i<<"\n";
return;
}
out<<"0\n";
}
int main()
{
int t,i;
in>>t;
in.getline(s,10);
for(i=1;i<=t;++i)
solve();
return 0;
}