Cod sursa(job #2718725)
| Utilizator | Data | 9 martie 2021 08:40:17 | |
|---|---|---|---|
| Problema | Prefix | Scor | 0 |
| Compilator | cpp-64 | Status | done |
| Runda | Arhiva de probleme | Marime | 0.57 kb |
#include <bits/stdc++.h>
using namespace std;
ifstream f("prefix.in"); ofstream g("prefix.out");
char sir[1000002];
int t,kmp[1000002];
int build_kmp(char str[])
{ int n=strlen(str);
kmp[1]=0;
for(int k=0,i=2;i<=n;i++)
{ while(k>0 && str[i-1]!=str[k]) k=kmp[k];
if(str[i-1]==str[k]) k++;
kmp[i]=k;
}
for(int i=n;i;i--)
if(kmp[i] && i%(i-kmp[i])==0) return i;
return 0;
}
int main()
{ f>>t;
while(t--)
{ f.getline(sir,1000002);
g<<build_kmp(sir)<<'\n';
}
g.close(); return 0;
}
