Pagini recente » Cod sursa (job #1050699) | Cod sursa (job #926401) | Cod sursa (job #703890) | Cod sursa (job #57828) | Cod sursa (job #1148244)
#include <fstream>
#include <cstring>
using namespace std;
const int MAX_LEN = 1000002;
int T, N;
int Pi[MAX_LEN];
char s[MAX_LEN];
void prefix() {
for(int i = 2, p = 0; i <= N; ++i) {
while(p > 0 && s[p + 1] != s[i])
p = Pi[p];
if(s[p + 1] == s[i])
++p;
Pi[i] = p;
}
}
int main() {
ifstream f("prefix.in");
ofstream g("prefix.out");
s[0] = ' ';
f >> T;
for(int t = 1; t <= T; ++t) {
f >> (s + 1);
N = strlen(s);
prefix();
bool ok = 0;
for(int j = N; j >= 1; --j)
if(Pi[j] && j % (j - Pi[j]) == 0) {
g << j << "\n";
j = 1;
ok = 1;
}
if(ok == 0)
g << 0 << "\n";
}
f.close();
g.close();
return 0;
}