Pagini recente » Cod sursa (job #3194506) | Cod sursa (job #1974340) | Cod sursa (job #2610582) | Cod sursa (job #2394930) | Cod sursa (job #2298455)
#include <bits/stdc++.h>
using namespace std;
ifstream f("prefix.in");
ofstream g("prefix.out");
int T;
string str;
vector<int> phi;
int kmp(string x);
int main()
{
f >> T;
for(int i = 1; i <= T; i++) {
f >> str;
g << kmp(str) << "\n";
}
return 0;
}
int kmp(string x) {
int MAX = 0;
phi.resize(x.size() + 3, 0);
for(int i = 1; i < x.size(); i++) {
int rez = phi[i - 1];
while(rez && x[i] != x[rez])
rez = phi[rez - 1];
if(x[i] == x[rez]) rez++;
phi[i] = rez;
if(((i + 1) - phi[i]) < (i + 1) && (i + 1) % ((i + 1) - phi[i]) == 0)
MAX = i + 1;
}
return MAX;
}