Pagini recente » Cod sursa (job #247859) | Cod sursa (job #2894625) | Cod sursa (job #2320265) | Cod sursa (job #2544961) | Cod sursa (job #3250676)
#include <fstream>
#include <cstring>
using namespace std;
ifstream cin ("prefix.in");
ofstream cout ("prefix.out");
int prefix[1000001];
char sir[1000001];
int main ()
{
ios :: sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
int numar_teste;
cin >> numar_teste;
while (numar_teste--)
{
cin >> sir;
int lungime = (int)strlen(sir) , maxim = 0;
for (int indice = 1 , lungime_actuala = 0 ; indice < lungime ; indice++)
{
while (lungime_actuala && sir[lungime_actuala] != sir[indice])
{ lungime_actuala = prefix[lungime_actuala - 1]; }
lungime_actuala += (sir[lungime_actuala] == sir[indice] ? 1 : 0);
prefix[indice] = lungime_actuala;
if (lungime_actuala && (indice + 1) % (indice - lungime_actuala + 1) == 0)
{ maxim = indice + 1; }
}
cout << maxim << '\n';
}
return 0;
}