Cod sursa(job #1822117)
| Utilizator | Data | 4 decembrie 2016 12:31:06 | |
|---|---|---|---|
| Problema | Prefix | Scor | 100 |
| Compilator | cpp | Status | done |
| Runda | Arhiva de probleme | Marime | 0.63 kb |
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e6;
string s;
int pi[MAXN + 1];
int main()
{
int t, n, i, k, ans;
ifstream fin("prefix.in");
fin >> t;
ofstream fout("prefix.out");
for (t; t > 0; --t) {
s.clear();
fin >> s;
n = s.size();
for (i = 2, k = ans = 0; i <= n; ++i) {
while (k > 0 && s[i - 1] != s[k])
k = pi[k];
if (s[i - 1] == s[k])
++k;
pi[i] = k;
if (k && i % (i - k) == 0)
ans = i;
}
fout << ans << '\n';
}
fin.close();
fout.close();
return 0;
}
