Pagini recente » Diferente pentru problema/maxd intre reviziile 27 si 8 | Cod sursa (job #166468) | Cod sursa (job #2275451) | Cod sursa (job #550768) | Cod sursa (job #1155431)
#include <fstream>
#include <string>
using namespace std;
ifstream fin ("prefix.in");
ofstream fout ("prefix.out");
const int N = 1e6 + 5;
string s;
int n, U[N];
int main() {
fin >> n;
while (n--) {
int sol = 0;
string Input;
fin >> Input;
s = ' ' + Input;
int k = 0;
for (int i = 2; i < s.size(); ++i) {
while (k && s[k + 1] != s[i])
k = U[k];
if (s[k + 1] == s[i])
k++;
U[i] = k;
}
int i = s.size() - 1;
for (; i; --i)
if (U[i] && i % (i - U[i]) == 0) {
fout << i << "\n";
break;
}
if (!i)
fout << 0 << "\n";
}
}