Cod sursa(job #2460403)
Utilizator | Data | 23 septembrie 2019 17:33:05 | |
---|---|---|---|
Problema | Prefix | Scor | 100 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva de probleme | Marime | 0.42 kb |
#include <fstream>
int t, kmp[1<<20], n, i, j;
char s[1<<20];
int main() {
std::ifstream f("prefix.in");
std::ofstream o("prefix.out");
f>>t; do {
f>>s;
for(i=1,j=0; s[i]; ++i)
if(s[i]==s[j]) kmp[i]=++j;
else kmp[i]=j=(s[i]==s[0]);
for(j=0; i; --i)
if(kmp[i-1]&&i%(i-kmp[i-1])==0){j=i;break;}
o<<j<<'\n';
} while(--t);
}