Pagini recente » Istoria paginii runda/sad | Cod sursa (job #2772414) | Cod sursa (job #656883) | Cod sursa (job #1937532) | Cod sursa (job #1710968)
#include <fstream>
#include <cstring>
using namespace std;
ifstream f("prefix.in");
ofstream g("prefix.out");
int t, l1, i, maxim, p, prec[1000005];
char s[1000005];
int main(){
f >> t; f.get();
while (t){
f.getline(s+1, 1000004);
maxim = 0;
l1 = strlen(s+1);
p = 0;
for (i = 2; i <= l1; i++){
while (p && s[p+1] != s[i])
p = prec[p];
if (s[p+1] == s[i])
p++;
prec[i] = p;
}
bool ok = 0;
for (i = l1; i >= 1 && !ok; i--)
if (prec[i]>0 && i%(i-prec[i]) == 0) maxim = i, ok = 1;
g << maxim << '\n';
t--;
}
return 0;
}