Cod sursa(job #2443788)
| Utilizator | Data | 29 iulie 2019 14:49:18 | |
|---|---|---|---|
| Problema | Prefix | Scor | 70 |
| Compilator | cpp-64 | Status | done |
| Runda | Arhiva de probleme | Marime | 0.64 kb |
#include <bits/stdc++.h>
using namespace std;
const int N = 1e6;
int p[1 + N + 1];
void solve () {
string s;
cin >> s;
int n = s.size ();
p[0] = -1; p[1] = 0;
int ans = 0;
for (int i = 2; i <= n; i++) {
int cur = p[i - 1];
while (cur >= 0 && s[cur] != s[i - 1])
cur = p[cur];
p[i] = cur + 1;
if (p[i] > 0 && i % (i - p[i]) == 0)
ans = i;
}
cout << ans << "\n";
}
int main() {
freopen ("prefix.in", "r", stdin);
freopen ("prefix.out", "w", stdout);
int t;
cin >> t;
while (t--)
solve ();
return 0;
}
