Pagini recente » Cod sursa (job #3147055) | Cod sursa (job #1143073) | Cod sursa (job #816452) | Cod sursa (job #815643) | Cod sursa (job #2462349)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("prefix.in");
ofstream fout ("prefix.out");
#define NMAX 1000003
int lps [NMAX], ind, t, ans;
string str;
void KMP (string A){
ind = 0;
memset (lps, 0, sizeof (lps));
for (int i = 1; i < A.size ();){
if (A [ind] == A [i]){
lps [i ++] = ++ ind;
}
else if (ind != 0)
ind = lps [ind - 1];
else lps [i ++] = 0;
}
}
int main (){
fin >> t;
while (t --){
fin >> str;
KMP (str); ans = 0;
for (int i = str.size () - 1; i >= 0; i --){
if (lps [i] != 0 && (i + 1) % (i - lps [i]) == 0){
ans = i + 1;
break;
}
if (i % 2 == 1 && lps [i] == (i + 1) / 2){
ans = i + 1;
break;
}
}
fout << ans << '\n';
}
return 0;
}