Pagini recente » Cod sursa (job #1014998) | Cod sursa (job #1383550) | Cod sursa (job #200430) | Cod sursa (job #435092) | Cod sursa (job #935648)
Cod sursa(job #935648)
#include <fstream>
#include <cstring>
#define MAX_SIZE 1000009
using namespace std;
ifstream f("prefix.in"); ofstream g("prefix.out");
int t, m, n, ok, pi[MAX_SIZE];
char A[MAX_SIZE];
inline void prefix() {
int k = 0;
ok = 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;
if(pi[q] > 0)
ok = 1;
}
}
int main() {
f >> t;
f.getline(A, MAX_SIZE);
for(; t; t --) {
f.getline(A, MAX_SIZE);
n = strlen(A);
for(int i = n; i >= 1; --i) A[i] = A[i - 1];
prefix();
if(ok) {
for(int i = n; i >= 1; -- i)
if(pi[i] && pi[i] % (i - pi[i]) == 0) {
m = i;
break;
}
g << m << '\n';
memset(pi, 0, sizeof(pi));
}
else g << "0\n";
}
}