Cod sursa(job #2470952)
| Utilizator | Data | 9 octombrie 2019 21:32:55 | |
|---|---|---|---|
| Problema | Prefix | Scor | 100 |
| Compilator | cpp-64 | Status | done |
| Runda | Arhiva de probleme | Marime | 0.77 kb |
#include <bits/stdc++.h>
using namespace std;
int pi[1000001];
int main()
{
ifstream cin("prefix.in");
ofstream cout("prefix.out");
int t;
cin >> t;
while(t--){
string s;
cin >> s;
int i = 0;
int n = s.size();
for(i = 1;i < n;i++){
int j = pi[i - 1];
while(j > 0 && s[i] != s[j]){
j = pi[j-1];
}
if(s[i] == s[j])
j++;
pi[i] = j;
}
for(i = n - 1;i >= 0;i--){
if(pi[i] && (i + 1) % (i + 1 - pi[i]) == 0)
{
cout << i + 1 << "\n";
break;
}
}
if(i == -1)
cout << "0\n";
}
return 0;
}
