Pagini recente » Cod sursa (job #2093340) | Cod sursa (job #1610420) | Cod sursa (job #1286916) | Cod sursa (job #827196) | Cod sursa (job #599543)
Cod sursa(job #599543)
#include <fstream>
#include <cstring>
using namespace std;
const int N = 1000005;
char s[N];
int t, L[N];
inline int prefix(){
int v, k, n = strlen(s), i, max = 0;
int sol[100005],nr;
L[1] = 0;
for(i = 2; i <= n; ++i){
k = L[i - 1];
while(k && s[k] != s[i - 1])
k = L[k];
if(s[k] == s[i - 1])
++k;
L[i] = k;
// printf("%d %d\n", i, k);
if(k && i % (i - k) == 0)
max = i;
}
// printf("\n");
return max;
}
int main() {
ifstream fin("prefix.in");
ofstream fout("prefix.out");
int i;
fin >> t;
for(i = 1; i <= t; ++i) {
fin >> s;
fout << prefix() << '\n';;
}
return 0;
}