Pagini recente » Cod sursa (job #2820842) | Cod sursa (job #1484092) | Cod sursa (job #3255107) | Cod sursa (job #2533698) | Cod sursa (job #2478375)
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
vector <int> KMP(string &s)
{
vector <int> pi(s.size(), 0);
for (int i = 1, k = 0;i < s.size();++i)
{
for (;k > 0 && s[k] != s[i];k = pi[k - 1]);
if (s[i] == s[k])
++k;
pi[i] = k;
}
return pi;
}
int main()
{
ifstream fin("prefix.in");
ofstream fout("prefix.out");
int tests;
fin >> tests;
while (tests-- > 0)
{
int answer = 0;
string s;
fin >> s;
vector <int> pi = KMP(s);
for (int i = 1;i < s.size();++i)
{
int n = i + 1 - pi[i];
if (n != i + 1 && (i + 1) % n == 0)
answer = i + 1;
}
fout << answer << "\n";
}
fin.close();
fout.close();
return 0;
}