Pagini recente » Cod sursa (job #1849770) | Cod sursa (job #2080440) | Cod sursa (job #9812) | Cod sursa (job #1186029) | Cod sursa (job #2472406)
#include <fstream>
#include <vector>
#include <algorithm>
#include <string>
#define MAXR 1000010
using namespace std;
ifstream fin("prefix.in");
ofstream fout("prefix.out");
int prefix[MAXR];
string s;
int t, sol;
void makePrefix()
{
s = "#" + s;
sol = 0;
int q = 0;
int sz = s.size();
prefix[1] = 0;
for (int i = 2; i < sz; i++)
{
while (q && s[i] != s[q + 1])
q = prefix[q];
if (s[q + 1] == s[i])
q++;
prefix[i] = q;
if (prefix[i] != 0)
if (i % (i - prefix[i]) == 0)
sol = i;
}
}
void showPrefix()
{
for (int i = 1; i < s.size(); i++)
fout << s[i] << ' ';
fout << '\n';
for (int i = 1; i < s.size(); i++)
fout << prefix[i] << ' ';
fout << '\n';
}
int main()
{
fin >> t;
while (t--)
{
fin >> s;
makePrefix();
fout << sol << '\n';
}
return 0;
}