Pagini recente » Cod sursa (job #591591) | Cod sursa (job #2430853) | Cod sursa (job #751485) | Cod sursa (job #2624751) | Cod sursa (job #1573315)
#include<fstream>
#include<math.h>
#include<algorithm>
#include<string.h>
#include<vector>
using namespace std;
ifstream in("prefix.in");
ofstream out("prefix.out");
char s[1000010];
int prefix[1000010];
int main()
{
int T;
in >> T;
while (T--)
{
in >> s;
int mx = 0;
int j = 0;
for (int i = 1; s[i] != '\0'; ++i)
{
while (j > 0 && s[j] != s[i])
j = prefix[j - 1];
if (s[j] == s[i])
++j;
prefix[i] = j;
if (prefix[i] * 2 == (i + 1))
mx = max(mx, i + 1);
else if (mx>0 && prefix[i] * 2 > (i + 1) && prefix[i]%mx==0)
mx = max(mx, i + 1);
}
out << mx << '\n';
}
return 0;
}