Cod sursa(job #2460398)
| Utilizator | Data | 23 septembrie 2019 17:19:50 | |
|---|---|---|---|
| Problema | Prefix | Scor | 100 |
| Compilator | cpp-64 | Status | done |
| Runda | Arhiva de probleme | Marime | 0.55 kb |
#include <bits/stdc++.h>
using namespace std;
int t, kmp[1000005], n, i, j;
string s;
int main() {
ifstream fin("prefix.in");
ofstream fout("prefix.out");
fin >> t; do {
fin >> s; n = s.size();
for(i = 1, j = 0; i < n; ++i) {
if(s[i] == s[j]) kmp[i] = ++j;
else kmp[i] = j = (s[i] == s[0]);
} for(i = n-1, j = 0; i > 0; --i) {
if(kmp[i] && (i+1) % (i+1-kmp[i]) == 0) {
j = i+1; break;
}
} (fout << j).put('\n');
} while(--t);
}