Pagini recente » Cod sursa (job #1568596) | Cod sursa (job #1778992) | Cod sursa (job #481063) | Cod sursa (job #99078) | Cod sursa (job #152557)
Cod sursa(job #152557)
#include <fstream>
#include <string>
using namespace std;
int pi[1000000];
ofstream fout("prefix.out");
void Prefix(string s)
{
int n = s.length();
int i, k;
string s2;
s2 += " ";
for (i = 0; i < n; i++)
s2 += s[i];
pi[1] = 0;
k = 0;
for (i = 2; i <= n; i++)
{
while (k > 0 && s2[k+1] != s2[i]) {k = pi[k];}
if (s2[k+1] == s2[i]) k++;
pi[i] = k;
}
int max = 0, x = 0, maxi = 0;
for (i = 1; i <= n; i++)
{
if (pi[i] > max && pi[i]%(i-pi[i]) == 0)
{
max = pi[i];
maxi = i;
}
}
fout << maxi << "\n";
}
int main()
{
ifstream fin("prefix.in");
int T, q;
string s;
fin >> T;
for (q = 1; q <= T; q++)
{
fin >> s;
Prefix(s);
}
fin.close();
fout.close();
return 0;
}