Pagini recente » Cod sursa (job #1377400) | Cod sursa (job #561594) | Cod sursa (job #3277493) | Cod sursa (job #835891) | Cod sursa (job #2481906)
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
const int MAXN = 2000041;
int v[MAXN];
int nr;
void sirprefixe(char x[], int n)
{
nr=0;
int j=0;
for(int i=2; i<=n; i++)
{
while(j>0 && x[i]!=x[j+1])
{
j = v[j];
}
if(x[i]==x[j+1])
j++;
v[i] = j;
int d=i-j;
if(j!=0 && i%d==0)
nr = max(nr, (i/d)*d);
}
}
int main()
{
ifstream fin ("prefix.in");
ofstream fout ("prefix.out");
int n, t;
char a[MAXN],g[50];
fin >> t;
fin.getline(g, 50);
for(int i=0; i<t; i++)
{
fin.getline(a+1, MAXN);
n = strlen(a+1);
sirprefixe(a, n);
fout << nr << "\n";
}
return 0;
}