Pagini recente » Cod sursa (job #10782) | Cod sursa (job #1970543) | Cod sursa (job #1052849) | Cod sursa (job #1505644) | Cod sursa (job #856630)
Cod sursa(job #856630)
#include <fstream>
#include <iostream>
#include <string>
using namespace std;
const int MAX_N = 1000100;
ifstream fin("prefix.in");
ofstream fout("prefix.out");
int T;
string pattern;
int N;
int prefix[MAX_N];
void solve();
void compute_prefix(const string pattern);
int main() {
solve();
return 0;
}
void solve() {
fin >> T;
fin.ignore();
for (int k = 1; k <= T; ++k) {
getline(fin, pattern);
N = pattern.size();
pattern = ' ' + pattern;
compute_prefix(pattern);
int i;
for (i = N; i > 0; --i) {
if ((prefix[i] > 0) && (i % (i - prefix[i]) == 0)) {
fout << i << '\n';
break;
}
}
if (i == 0) fout << 0 << '\n';
}
}
void compute_prefix(const string pattern) {
prefix[1] = 0;
int p = 0;
for (int i = 2; i <= N; ++i) {
while (p > 0 && pattern[p+1] != pattern[i]) p = prefix[p];
if (pattern[p+1] == pattern[i]) ++p;
prefix[i] = p;
}
}