Pagini recente » Cod sursa (job #2809258) | Cod sursa (job #3131987) | Cod sursa (job #1852626) | Cod sursa (job #643811) | Cod sursa (job #2791802)
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
ifstream f ("prefix.in");
ofstream g ("prefix.out");
int n,l_sir;
char sir[1000001];
int prefixe[1000001];
int formare_prefixe()
{
int i = 0,j = -1;
prefixe[0] = -1;
int rasp = 0;
while(i<l_sir)
{
while(j>=0 && sir[i]!=sir[j])
{
j = prefixe[j];
}
i++;
j++;
prefixe[i] = j;
//formam prefixe ca la kmp
//si cand este indeplinita conditia inseamna ca am gasit o prefix periodic
int sir_din_fata = i - prefixe[i];
if(prefixe[i] !=0 && i%sir_din_fata == 0)
rasp = i;
}
return rasp;
}
int main()
{
f >> n;
f.get();
for(int i = 1;i<=n;i++)
{
f >> sir;
l_sir = strlen(sir);
g << formare_prefixe()<< endl;
}
}