Pagini recente » Cod sursa (job #2241507) | Cod sursa (job #2113250) | Cod sursa (job #2926819) | Cod sursa (job #2743292) | Cod sursa (job #2573356)
#include <fstream>
#include <cstring>
#define NMAX 1000005
using namespace std;
ifstream fin("prefix.in");
ofstream fout("prefix.out");
int PI[NMAX];
char s[NMAX];
int prefix(int n){
int k = 0;
int rez = 0;
for(int i = 2; i <= n; ++i){
while(k > 0 && s[k + 1] != s[i])
k = PI[k];
if(s[k + 1] == s[i])
++k;
PI[i] = k;
if(PI[i] > 0 && PI[i] % (i - PI[i]) == 0)
rez = i;
}
return rez;
}
int main()
{
int t;
fin >> t;
fin.get();
while(t --){
fin.getline(s + 1, NMAX);
int lg = strlen(s + 1);
fout << prefix(lg) << '\n';
}
return 0;
}