Cod sursa(job #2548029)
| Utilizator | Data | 16 februarie 2020 08:27:44 | |
|---|---|---|---|
| Problema | Prefix | Scor | 90 |
| Compilator | cpp-64 | Status | done |
| Runda | amcontrolerdexboxdinmall | Marime | 0.54 kb |
#include <bits/stdc++.h>
using namespace std;
ifstream fin("prefix.in");
ofstream fout("prefix.out");
main()
{
int n;
fin >> n;
for(int i = 1; i <= n; i++)
{
string s;
fin >> s;
s = ' ' + s;
int l = s.size() - 1;
int pos = 0;
vector <int> phi(l + 1);
int ans = 0;
int k = 0;
for(int i = 2; i <= l; i++)
{
while(k && s[k + 1] != s[i])
k = phi[k];
if(s[k + 1] == s[i])
k++;
phi[i] = k;
if(phi[i] != 0 && i % (i - phi[i]) == 0)
ans = i;
}
fout << ans << '\n';
}
}