Pagini recente » Cod sursa (job #2973773) | Cod sursa (job #1818621) | Cod sursa (job #2588156) | Cod sursa (job #2813434) | Cod sursa (job #3038806)
#include <fstream>
#include <string>
using namespace std;
ifstream in ("prefix.in");
ofstream out ("prefix.out");
const int max_size = 1e6 + 1;
string s;
int prefix[max_size], ans;
void kmp ()
{
int q = 0;
for (int i = 2; i < s.size(); i++)
{
while (q > 0 && s[q + 1] != s[i])
{
q = prefix[q];
}
if (s[q + 1] == s[i])
{
q++;
}
prefix[i] = q;
int sz = i - prefix[i];
if (prefix[i] > 0 && i % sz == 0)
{
ans = i;
}
}
}
void solve ()
{
ans = 0;
in >> s;
s = '$' + s;
kmp();
out << ans << '\n';
}
int main ()
{
int t;
in >> t;
while (t--)
{
solve();
}
in.close();
out.close();
return 0;
}