Cod sursa(job #2637378)
Utilizator | Irimia Alex irimia_alex | Data | 22 iulie 2020 18:09:28 |
---|---|---|---|
Problema | Prefix | Scor | 100 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva de probleme | Marime | 0.58 kb |
#include <fstream>
#include <iostream>
#define NMAX 1000001
using namespace std;
ifstream fin("prefix.in");
ofstream fout("prefix.out");
char s[NMAX];
int p[NMAX];
void prefix() {
int res = 0;
p[0] = 0;
int i = 0, j = 1;
while (s[j] != '\0') {
if (s[i] == s[j]) {
++i;
p[j] = i;
++j;
if (i >= j / 2 && j % (j - i) == 0)
res = j;
}
else
if (i == 0) {
p[j] = 0;
++j;
}
else
i = p[i - 1];
}
fout << res << '\n';
}
int main() {
int t;
fin >> t;
while (t--) {
fin >> s;
prefix();
}
return 0;
}