Cod sursa(job #3257975)
| Utilizator | Data | 20 noiembrie 2024 13:56:29 | |
|---|---|---|---|
| Problema | Prefix | Scor | 100 |
| Compilator | cpp-64 | Status | done |
| Runda | Arhiva de probleme | Marime | 0.55 kb |
#include <bits/stdc++.h>
using namespace std;
ifstream fin("prefix.in");
ofstream fout("prefix.out");
int t, urm[1000006];
string s;
int kmp()
{
int k = 0, m = s.length(), res = 0;
for (int i=2; i<=m; i++)
{
while(k > 0 && s[k] != s[i - 1]) k = urm[k];
if (s[k] == s[i - 1]) k ++;
urm[i] = k;
if (i % (i - urm[i]) == 0 && urm[i] != 0) res = i;
}
return res;
}
int main()
{
fin >> t;
while(t--)
{
fin >> s;
fout << kmp() << '\n';;
}
return 0;
}
