Pagini recente » Cod sursa (job #74055) | Cod sursa (job #1332070) | Cod sursa (job #563323) | Cod sursa (job #2042695) | Cod sursa (job #2128562)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream in("prefix.in");
ofstream out("prefix.out");
const int Nmax = 1000005;
int main()
{
int t;
string s;
vector<int> kmp(Nmax);
in >> t;
while (t)
{
in >> s;
kmp[0] = -1;
int rez = 0;
int nr = 0;
int w = -1;
int lg = s.size();
for (int i = 1; i < lg; i++)
{
while (w != -1 && s[w + 1] != s[i])
w = kmp[w];
if (s[w + 1] == s[i])
w++;
kmp[i] = w;
}
for (int i = lg - 1; i >= 0; i--)
if ((i + 1) % (i - kmp[i]) == 0 && kmp[i] != -1)
{
rez = i + 1;
break;
}
out << rez << '\n';
t--;
}
return 0;
}