Cod sursa(job #1722757)
| Utilizator | Data | 28 iunie 2016 19:29:21 | |
|---|---|---|---|
| Problema | Prefix | Scor | 90 |
| Compilator | cpp | Status | done |
| Runda | Arhiva de probleme | Marime | 0.5 kb |
using namespace std;
#include <cstdio>
#define Lmax 1000011
int p[Lmax];
char s[Lmax + 1];
int main()
{
freopen("prefix.in", "r", stdin);
freopen("prefix.out", "w", stdout);
int t, i, k, res;
for (scanf("%d\n", &t); t; --t)
{
scanf("%s\n", s + 1);
for (res = 0, k = 0, i = 2; s[i]; ++i)
{
while (k > 0 && s[k + 1] != s[i]) k = p[k];
if (s[k + 1] == s[i]) ++k;
p[i] = k;
if (k && k % (i - k) == 0) res = i;
}
printf("%d\n", res);
}
return 0;
}