Pagini recente » Cod sursa (job #2398132) | Cod sursa (job #119341) | Cod sursa (job #2088720) | Cod sursa (job #1297452) | Cod sursa (job #2084998)
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
ifstream in("prefix.in");
ofstream out("prefix.out");
const int LMAX = 1e6;
int t, res;
int pref[LMAX];
string s;
void kmp() {
for(int i = 1; i < s.size(); i++) {
int ant = pref[i - 1];
while(0 < ant && s[i] != s[ant])
ant = pref[ant - 1];
pref[i] = ant;
if(s[i] == s[ant])
pref[i]++;
}
}
void clean() {
res = -1;
s.clear();
memset(pref, 0, sizeof(pref));
}
int main()
{
in >> t;
for(int test = 1; test <= t; test++) {
clean();
in >> s;
kmp();
for(int i = 0; i < s.size(); i++) {
if(0 < pref[i]) {
int val = i - pref[i] + 1;
if((i + 1) % val == 0)
res = i;
}
}
out << res + 1 << '\n';
}
return 0;
}