Pagini recente » Cod sursa (job #3152544) | Cod sursa (job #1059435) | Cod sursa (job #2582826) | Cod sursa (job #1456657) | Cod sursa (job #2796082)
#include <bits/stdc++.h>
using namespace std;
ifstream in("prefix.in");
ofstream out("prefix.out");
vector<int> kmp(string s) {
s = '%' + s;
vector<int> lps((int)s.size(), 0);
int k = 0;
for (int i = 2; i < (int)s.size(); i++) {
while (k > 0 && s[k + 1] != s[i]) {
k = lps[k];
}
if (s[k + 1] == s[i]) {
k++;
}
lps[i] = k;
}
lps.erase(lps.begin());
return lps;
}
int main() {
in.tie(NULL);
ios_base::sync_with_stdio(false);
int n; in >> n;
while (n --) {
string s; in >> s;
auto lps = kmp(s);
int result = 0;
for (int i = 0; i < (int)s.size(); i++) {
if (lps[i] > 0 && (i + 1) % (i + 1 - lps[i]) == 0) {
result = i + 1;
}
}
out << result << "\n";
}
return 0;
}