Cod sursa(job #3161704)
| Utilizator | Data | 27 octombrie 2023 19:38:33 | |
|---|---|---|---|
| Problema | Prefix | Scor | 100 |
| Compilator | cpp-64 | Status | done |
| Runda | Arhiva de probleme | Marime | 0.63 kb |
#include <fstream>
#include <cstring>
using namespace std;
ifstream in("prefix.in");
ofstream out("prefix.out");
const int N = 1e6 + 5;
int tt, pi[N];
char c[N];
int main() {
in >> tt;
while(tt--) {
in >> c;
int ans = 0, n = strlen(c);
for(int i=1; i<n; i++) {
int j = pi[i-1];
while(j && c[i] != c[j])
j = pi[j-1];
if(c[i] == c[j])
j++;
pi[i] = j;
if(pi[i] && (i + 1) % (i - pi[i] + 1) == 0)
ans = i + 1;
}
out << ans << '\n';
}
return 0;
}