Pagini recente » Cod sursa (job #3228597) | Cod sursa (job #223242) | Cod sursa (job #3236611) | Cod sursa (job #3279369) | Cod sursa (job #3268773)
#include <fstream>
#include <cstring>
#include <cmath>
using namespace std;
ifstream fin("prefix.in");
ofstream fout("prefix.out");
#define NMAX 1000005
char s[NMAX];
int prefix[NMAX];
void build(int n) {
int k = 0;
prefix[1] = 0;
for (int i = 2; i <= n; ++i) {
while (k >= 1 && s[k + 1] != s[i]) {
k = prefix[k];
}
if (s[k + 1] == s[i]) {
k++;
}
prefix[i] = k;
}
}
int main() {
int t;
fin >> t;
fin.get();
while (t--) {
fin.getline(s + 1, NMAX);
s[0] = ' ';
int n = strlen(s + 1);
build(n);
int lmax = 0;
for (int i = n; i >= 1 && !lmax; --i) {
if (i % (i - prefix[i]) == 0 && prefix[i]) {
lmax = i;
}
}
fout << lmax << '\n';
}
return 0;
}