Cod sursa(job #2989838)
| Utilizator | Data | 7 martie 2023 08:34:56 | |
|---|---|---|---|
| Problema | Prefix | Scor | 100 |
| Compilator | cpp-64 | Status | done |
| Runda | Arhiva de probleme | Marime | 0.76 kb |
#include <bits/stdc++.h>
using namespace std;
fstream fin("prefix.in");
ofstream fout("prefix.out");
int t;
int main(){
fin >> t;
while(t--){
string s;
fin >> s;
int n = s.size();
s = "*" + s;
vector<int> p(n + 1);
int k = 0;
p[1] = 0;
for(int i = 2; i <= n; i++){
while(k > 0 && s[k + 1] != s[i]){
k = p[k];
}
if(s[k + 1] == s[i])
k++;
p[i] = k;
}
int maxi = 0;
for(int i = 1; i <= n; i++){
int idk = i - p[i];
if(p[i] && i % idk == 0)
maxi = max(maxi, i);
}
fout << maxi << '\n';
}
}
