Pagini recente » Cod sursa (job #657894) | Cod sursa (job #572913) | Cod sursa (job #28990) | Cod sursa (job #2794140) | Cod sursa (job #837358)
Cod sursa(job #837358)
#include <fstream>
#include <string.h>
#define NMax 1000010
using namespace std;
const char IN[]="prefix.in",OUT[]="prefix.out";
ifstream fin(IN);
ofstream fout(OUT);
int Tes,N,Rez;
int P[NMax];
char A[NMax];
inline void prefix(){
int i,k=0;
P[1]=0;Rez=0;
for (i=2;A[i];++i)
{
while (k && A[k+1]!=A[i])
k=P[k];
k+= (A[k+1]==A[i]);
P[i]=k;
}
for (--i;i;--i)
if (P[i] && i%(i-P[i])==0 ) { Rez=i;return;}
}
int main()
{
fin>>Tes;fin.get();
while (Tes--)
{
fin.getline(A+1,NMax);
prefix();
fout<<Rez<<"\n";
}
fin.close();fout.close();
return 0;
}