Cod sursa(job #2221072)
Utilizator | Data | 13 iulie 2018 00:20:28 | |
---|---|---|---|
Problema | Prefix | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 0.7 kb |
#include <bits/stdc++.h>
using namespace std;
ifstream in("prefix.in");
ofstream out("prefix.out");
string s;
vector<int> pi(1000005, 0);
int main() {
ios::sync_with_stdio(false);
int tests;
in >> tests;
while(tests --) {
s.clear();
int sol = 0;
in >> s;
s = " " + s;
pi.clear();
int k = 0;
for(int i = 2; i < s.size(); i ++) {
while(k > 0 && s[k + 1] != s[i])
k = pi[k];
if(s[k + 1] == s[i])
k ++;
pi[i] = k;
if(i % (i - pi[i]) == 0 && pi[i])
sol = i;
}
out << sol << "\n";
}
return 0;
}