Pagini recente » Cod sursa (job #1620157) | Cod sursa (job #2263987) | Cod sursa (job #1237388) | Cod sursa (job #280159) | Cod sursa (job #2790918)
#include <iostream>
#include <cstring>
#include <fstream>
using namespace std;
#define NMAX 1000005
ifstream f("prefix.in");
ofstream g("prefix.out");
int T, m, P[NMAX];
char p[NMAX];
void afisare_Prefixe()
{
for(int i = 0; i < m; ++i)
g<<p[i]<<" ";
for(int i = 0; i < m; ++i)
g<<P[i]<<" ";
g<<'\n';
}
void formare_Prefixe()
{
int i=0, j=-1, res = 0;
P[0] = -1;
while(i < m)
{
while(j >= 0 && p[i] != p[j])
j = P[j];
i++;
j++;
P[i] = j;
if(i%(i-P[i]) == 0 && P[i] != 0)
res = i;
}
//afisare_Prefixe();
g<<res<<'\n';
}
int main()
{
f>>T;
for(int i = 0; i < T; ++i)
{
f>>p;
m = strlen(p);
formare_Prefixe();
}
return 0;
}