Pagini recente » Cod sursa (job #646347) | Cod sursa (job #401572) | Cod sursa (job #2127701) | Cod sursa (job #50511) | Cod sursa (job #292160)
Cod sursa(job #292160)
#include <fstream>
#include <string>
using namespace std;
const int LMAX=1000001;
string S;
int T,pi[LMAX];
ifstream f("prefix.in");
ofstream g("prefix.out");
int main(){
int i,k;
f>>T;
getline(f,S);
while (T--){
getline(f,S);
pi[1]=k=0;
for (i=2;i<=(int)S.length();++i){
while (k>0 && S[i-1]!=S[k]) k=pi[k];
if (S[k]==S[i-1]) ++k;
pi[i]=k;
}
int r=0;
for (i=(int)S.length()-1;i>=0;i--)
if (pi[i+1]>0 && (i+1)%(i+1-pi[i+1])==0)
{
r=i+1;
break;
}
g<<r<<'\n';
}
return 0;
}