Pagini recente » Cod sursa (job #2972606) | Cod sursa (job #2245862)
#include <fstream>
#include <string>
using namespace std;
#define MAX_CHARS 1000001
ifstream fin("prefix.in");
ofstream fout("prefix.out");
string str;
int numTests, map[MAX_CHARS];
int buildSufPref() {
int sol = 0, len = (int)str.size();
for (int i = 1, j = 0; i < len; ++i) {
while (str[i] != str[j] && j) {
j = map[j - 1];
}
if (str[i] == str[j]) {
++j;
}
map[i] = j;
if (!((i + 1) % (i - map[i] + 1)) && map[i]) {
sol = i + 1;
}
}
return sol;
}
int main() {
fin >> numTests;
while (numTests--) {
fin >> str;
fout << buildSufPref() << '\n';
}
return 0;
}