Pagini recente » Cod sursa (job #3236572) | Cod sursa (job #2517917) | Cod sursa (job #154288) | Cod sursa (job #2973775) | Cod sursa (job #2863212)
#include <fstream>
using namespace std;
const int NMAX = 1000001;
char A[NMAX + 1];
int m, p[NMAX];
ifstream f("prefix.in");
ofstream g("prefix.out");
int prefix()
{
int k = 0, per = 0;
p[1] = 0;
for(int i = 2; i <= m; i++)
{
while(k > 0 && A[i] != A[k + 1])
k = p[k];
if(A[i] == A[k + 1])
k++;
p[i] = k;
if(k > 0 && i % (i - k) == 0)
per = i;
}
return per;
}
int main()
{
int T;
f >> T;
f.get();
while(T--)
{
f.getline(A + 1, NMAX);
m = f.gcount() - 1;
g << prefix() << '\n';
}
f.close();
g.close();
return 0;
}