Pagini recente » Cod sursa (job #2299502) | Cod sursa (job #1203054) | Cod sursa (job #3129770) | Cod sursa (job #2869660) | Cod sursa (job #935668)
Cod sursa(job #935668)
#include <fstream>
#include <cstring>
#define MAX_SIZE 1000009
using namespace std;
ifstream f("prefix.in"); ofstream g("prefix.out");
int t, m, n, pi[MAX_SIZE];
char A[MAX_SIZE];
inline void prefix() {
int k = 0;
pi[0] = pi[1] = 0;
for(int q = 2; q <= n; ++q) {
while(k > 0 && A[k + 1] != A[q]) k = pi[k];
if(A[k + 1] == A[q]) ++ k;
pi[q] = k;
}
}
int main() {
f >> t;
f.getline(A, MAX_SIZE);
for(int tt = 1; tt <= t; ++ tt) {
f.getline(A + 1, MAX_SIZE);
n = strlen(A + 1);
prefix();
m = 0;
for(int i = n; i >= 1; -- i)
if(pi[i] && pi[i] % (i - pi[i]) == 0) {
m = i;
break;
}
g << m << '\n';
}
g.close();
return 0;
}