Pagini recente » Borderou de evaluare (job #281733) | Borderou de evaluare (job #3141370) | Cod sursa (job #2991229)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin ("prefix.in");
ofstream fout ("prefix.out");
int main()
{
int n;
fin>>n;
string cuv;
for (int q=1; q<=n; q++) {
fin>>cuv;
int lps[1000005];
int len=0;
lps[0]=0;
for (int i=1; i<cuv.size(); i++) {
if (cuv[i]==cuv[len]) {
len++;
lps[i]=len;
}
else {
if (len!=0) {
len=lps[len-1];
i--;
}
else {
lps[i]=0;
}
}
}
int ans = 0;
for (int j = 2; j <= (int)cuv.size(); j++)
if (lps[j - 1] != 0 && j % (j - lps[j - 1]) == 0)
ans = j;
fout<<ans<<'\n';
}
return 0;
}