Pagini recente » Cod sursa (job #1058482) | Cod sursa (job #2040766) | Monitorul de evaluare | Cod sursa (job #228727) | Cod sursa (job #777890)
Cod sursa(job #777890)
#include <fstream>
using namespace std;
const int kMaxN = 1000005;
int Pi[kMaxN], L;
char S[kMaxN];
ifstream fin("prefix.in");
ofstream fout("prefix.out");
inline void KMP() {
Pi[1] = 0;
int i, k;
for (i = 2, k = 0; S[i]; ++i) {
while (k && S[k+1] != S[i])
k = Pi[k];
k += (S[k+1] == S[i]);
Pi[i] = k;
}
for (; i; --i)
if (Pi[i] && i%(i-Pi[i]) == 0) {
L = i;
return;
}
}
inline void Read() {
L = 0;
fin.getline(S+1, kMaxN);
}
inline void Print() {
fout << L << "\n";
}
int main() {
int T; fin >> T; fin.get();
for (; T; --T) {
Read();
KMP();
Print();
}
return 0;
}